Text  |   XML   |   Visible Warnings:

Pvm : Pvm analysis 1 : Use After Free  at cmds.c:499

Categories: LANG.ALLOC.UAF CWE:416
Warning ID: 2916.2998
Procedure: newalias
Trace: View
Modified: Wed Sep 2 12:52:43 2009   show details
 
Priority: None
State: None
Finding: None
Owner: None
  edit properties

Legend [ X ]
Warning Location
Contributes
Parse Error
Other Warning
Two or More Loop Iterations
On Execution Path
Comment
Macro
Preprocessor
Include
Keyword
Preprocessed Away

Source  |  Language: C Hide Legend     
ProblemLineSource
   /u1/paul/SATE/2010/c/pvm/pvm3/console/cmds.c
   Enter alias_cmd
 1385 alias_cmd(ac, av) 
 1386         int ac;
 1387         char **av;
 1388 {
 1389         struct alias *ap;
 1390         char *p;
 1391         int i;
 1392  
 1393         if (ac < 3) {
 1394                 for (ap = aliases->a_link; ap != aliases; ap = ap->a_link) {
 1395                         fputs(ap->a_name, stdout);
 1396                         p = "\t";
 1397                         for (i = 0; i < ap->a_num; i++) {
 1398                                 printf("%s%s", p, ap->a_args[i]);
 1399                                 p = " ";
 1400                         }
 1401                         fputs("\n", stdout);
 1402                 }
 1403  
 1404         } else {
true1405                 if (ap = findalias(av[1]))
 1406                         freealias(ap);
*aliases->a_link is freed1407                 newalias(av[1], ac - 2, av + 2);
     Enter alias_cmd / newalias
 484   struct alias * 
 485   newalias(name, num, args) 
 486           char *name;
 487           int num;
 488           char **args;
 489   {
 490           struct alias *ap, *ap2;
 491    
 492           ap = TALLOC(1, struct alias, "alias");
 493           ap->a_name = STRALLOC(name);   /* Null Pointer Dereference (ID: 2912.2985) */
 494           ap->a_args = TALLOC(num + 1, char *, "aargs");
 495           ap->a_num = num;
 496           while (num-- > 0)
 497                   ap->a_args[num] = STRALLOC(args[num]);   /* Null Pointer Dereference (ID: 2911.2983) */
*aliases->a_link is freed498           for (ap2 = aliases->a_link; ap2 != aliases; ap2 = ap2->a_link)
*ap2 is freed499                   if (strcmp(ap2->a_name, name) > 0)     /* Use After Free */
     Exit alias_cmd / newalias
Preconditions
$param_1 >= 3
aliases->a_link->a_num >= 1
strlen(aliases->a_link->a_name) = strlen(((char*)$param_2)[8])
aliases->a_link != aliases
Postconditions
aliases->a_link->a_link->a_rlink' = aliases->a_link->a_rlink
aliases->a_link->a_num' = -1
aliases->a_link->a_rlink' = 0
*aliases->a_link->a_name' is freed
*aliases->a_link->a_args' is freed
aliases->a_link->a_rlink->a_link' = aliases->a_link->a_link
aliases->a_link->a_link' = 0
*aliases->a_link' is freed
ac' = $param_1
ap' = aliases->a_link
ap' = &$heap_240182
ap2' = aliases->a_link
args' = $param_2 + 16
av' = $param_2
bytes_after(&$heap_240182)' = 48
$heap_240182' is allocated by malloc
$heap_240182' is allocated
bytes_before(&$heap_240182)' = 0
((char*)&$heap_240182)[16]' = &$heap_240183
((char*)&$heap_240182)[24]' = $param_1 - 2
((char*)&$heap_240182)[32]' = &$heap_240184
$heap_240183' = ((char*)*$param_2)[8]
bytes_after(&$heap_240183)' = strlen(((char*)$param_2)[8]) + 1
$heap_240183' is allocated by malloc
$heap_240183' is allocated
bytes_before(&$heap_240183)' = 0
strlen(&$heap_240183)' = strlen(((char*)$param_2)[8])
bytes_after(&$heap_240184)' = 8 * $param_1 - 8
$heap_240184' is allocated by malloc
$heap_240184' is allocated
bytes_before(&$heap_240184)' = 0
name' = ((char*)$param_2)[8]
num' = -1




Change Warning 2916.2998 : Use After Free

Priority:
State:
Finding:
Owner:
Note: