Text  |   XML   |   Visible Warnings:

pvm3.4.6 : pvm3.4.6 analysis 2 : Null Pointer Dereference  at ddpro.c:3137

Categories: LANG.MEM.NPD CWE:476
Warning ID: 173.28797
Similar Warnings: 173.28795
Procedure: dm_db
Trace: view
Modified: Thu Nov 26 11:28:03 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
   /kat0/fletcher/SATE/2010/pvm3/src/ddpro.c
   Enter dm_db
 2943 dm_db(hp, mp) 
 2944         struct hostd *hp;
 2945         struct pmsg *mp;
 2946 {
 2947         int opcode;                                     /* op requested */ 
 2948         int tid;
 2949         int req;                                        /* index requested */ 
 2950         int flags;
 2951         char *name = 0;                         /* class name */ 
 2952         struct pmsg *mp2 = 0;           /* reply */ 
 2953         struct pmsg *mp3 = 0;           /* data message */ 
 2954  
 2955         struct waitc *wp, *wp2;         /* wait ctx ptrs (notify, recvinfo */ 
 2956         struct pmsg *mp4 = 0;           /* notify forward message */ 
 2957         struct hostd *hp2;                      /* remote notify host */ 
 2958  
 2959         struct pvmmclass *np, *np2;     /* reset pointers */ 
 2960         struct pvmmentry *ep, *ep2;     /* reset pointers */ 
 2961         int *noresets;                          /* noreset tids */ 
 2962         int nnr;                                        /* # of noreset tasks */ 
 2963         int found;
 2964         int cc;
 2965         int i;
 2966         int notified;
 2967  
 2968         hp = hp;
 2969  
 2970         if (upkint(mp, &opcode) || upkint(mp, &tid) 
 2971         || upkstralloc(mp, &name) || upkint(mp, &req) || upkint(mp, &flags))
 2972                 goto badformat;
 2973  
 2974         mp2 = mesg_new(0);
 2975         mp2->m_dst = mp->m_src;   /* Null Pointer Dereference (ID: 183.28808) */
 2976         mp2->m_tag = DM_DBACK;
 2977         mp2->m_wid = mp->m_wid;
 2978  
 2979         switch (opcode) {
 2980  
 2981         case TMDB_PUT: 
 2982                 mp3 = mesg_new(0);
 2983                 if (pmsg_unpack(mp, mp3))
 2984                         goto badformat;
 2985                 if ((req = mb_insert(tid, name, req, flags, mp3)) < 0)
 2986                         pmsg_unref(mp3);
 2987                 else {
 2988  
 2989                         /* check for any pending requests for this mbox entry */ 
   ...
 3070                                 pmsg_unref(mp3);
 3071                         }
 3072                 }
 3073                 break;
 3074  
 3075         case TMDB_NAMES: 
 3076                 pkint(mp2, 0);
 3077                 req = mb_names(tid, name, mp2);
 3078                 break;
 3079  
 3080         case TMDB_RESET: 
 3081                 if ( upkint(mp, &nnr) )
 3082                         goto badformat;
 3083                 noresets = TALLOC( nnr, int, "int" );   /* Integer Overflow of Allocation Size (ID: 182.28806) */
 3084                 for ( i=0 ; i < nnr ; i++ ) {
 3085                         if ( upkint(mp, &(noresets[i])) ) {
 3086                                 PVM_FREE(noresets);   /* Free Null Pointer (ID: 174.28801) */
 3087                                 goto badformat;
 3088                         }
 3089                 }
 3090                 pkint(mp2, 0);
 3091                 for (np = pvmmboxclasses->mc_link; np != pvmmboxclasses;
 3092                                 np = np2) {
 3093                         np2 = np->mc_link;
 3094  
 3095                         /* If name passed in, only wipe mboxes in that class */ 
 3096                         if ( *name == '\0' || !strcmp( np->mc_name, name ) ) {   /* Null Pointer Dereference (ID: 177.28802) */
 3097  
 3098                         for (ep = np->mc_ent->me_link; ep != np->mc_ent; ep = ep2) {
 3099                                 ep2 = ep->me_link;
 3100  
 3101                                 /* If index passed in, only wipe that mbox */ 
 3102                                 /* -1 == All Entries */ 
 3103                                 if ( req < 0 || req == ep->me_ind ) {
 3104  
 3105                                 /* Check for Persistency (that thorn in my "side" :-) */ 
 3106                                 if ( ep->me_flags & PvmMboxPersistent ) {
 3107  
 3108                                         /* Task Already Gone?  Spank It. */ 
 3109                                         if (!(ep->me_tid)) {
 3110                                                 me_free(np, ep);
 3111                                                 if (np2->mc_rlink != np)
 3112                                                         break;
 3113                                         }
 3114                                  
 3115                                         /* Check for No-Reset Task */ 
 3116                                         /* (Only if actually killing tasks...) */ 
 3117                                         else if ( flags ) {  /* killtasks */ 
 3118                                                 for ( i=0, found=0 ; i < nnr && !found ; i++ )
 3119                                                         if ( noresets[i] == ep->me_tid )
 3120                                                                 found++;
 3121  
 3122                                                 /* Not a No-Reset, It WILL die soon. */ 
 3123                                                 /* Wait for cleanup. */ 
 3124                                                 if ( !found ) {
 3125                                                         wp = wait_new(WT_RESET);
 3126                                                         wp->wa_on = ep->me_tid;
 3127                                                         wp->wa_tid = pvmmytid;
 3128                                                         wp->wa_dep = 0;
 3129                                                         wp->wa_mesg = (struct pmsg *) NULL;
 3130  
 3131                                                         /* pass on to non-master host */ 
 3132                                                         hp2 = tidtohost(hosts, ep->me_tid);
 3133                                                         if ( hp2 && hp2->hd_hostpart != myhostpart )
 3134                                                         {
true3135                                                                 mp4 = mesg_new(0);
 3136                                                                 pkint(mp4, ep->me_tid);
mp4 <= 40953137                                                                 mp4->m_dst = hp2->hd_hostpart | TIDPVMD;     /* Null Pointer Dereference */
 3138                                                                 mp4->m_tag = DM_RESET;
 3139                                                                 mp4->m_wid = wp->wa_wid;
 3140                                                                 sendmessage(mp4);
Preconditions
&$unknown_670519 >= 1
&$unknown_670536 != 0
((char*)$unknown_670526)[12] != ((char*)*$unknown_670526)[12]
((char*)$unknown_670526)[12] != *$unknown_670530
((char*)$unknown_670526)[12] != $unknown_670530
((char*)$unknown_670530)[8] >= 0
((char*)$unknown_670530)[12] != 0
hosts->ht_last >= 1
*$unknown_670526 != pvmmboxclasses
pvmmboxclasses->mc_link != pvmmboxclasses
$unknown_670526 != pvmmboxclasses
((char*)&$unknown_670537)[4] != myhostpart
$heap_71322 = 0
strlen(&$heap_71322) = 0
numfrags != 0
numpmsgs != 0
Postconditions
freefrags.fr_link->fr_link->fr_rlink' = freefrags.fr_link->fr_rlink
freepmsgs.m_link->m_link->m_rlink' = freepmsgs.m_link->m_rlink
freefrags.fr_link->fr_rlink->fr_link' = freefrags.fr_link->fr_link
freepmsgs.m_link->m_rlink->m_link' = freepmsgs.m_link->m_link
ep' = $unknown_670530
ep2' = *$unknown_670530
errno' != 0
flags' = &$unknown_670536
found' = 0
freepmsgs.m_link' = &freepmsgs.m_link
freepmsgs.m_rlink' = &freepmsgs.m_link
bytes_after(&$heap_71322)' = &$unknown_670519
$heap_71322' is allocated by malloc
bytes_before(&$heap_71322)' = 0
bytes_after(&$heap_71323)' = 0
$heap_71323' is allocated by malloc
$heap_71323' is allocated
bytes_before(&$heap_71323)' = 0
bytes_after(&$heap_71324)' = 48
$heap_71324' is allocated by malloc
$heap_71324' is allocated
bytes_before(&$heap_71324)' = 0
((char*)&$heap_71324)[16]' = ((char*)$unknown_670530)[12]
((char*)&$heap_71324)[20]' = pvmmytid
((char*)&$heap_71324)[24]' = 0
((char*)&$heap_71324)[36]' = 0
((char*)&$heap_71324)[40]' = 0
((char*)&$heap_71324)[44]' = 0
((char*)&$heap_71324)[12]' = 17
hp2' = &$unknown_670537
i' = 0
mp2' = freepmsgs.m_link
mp3' = 0
mp4' = 0
name' = &$heap_71322
nnr' = 0
noresets' = &$heap_71323
np' = $unknown_670526
np2' = *$unknown_670526
numpmsgs' = 0
opcode' = 5
req' = ((char*)$unknown_670530)[8]
wp' = &$heap_71324




Change Warning 173.28797 : Null Pointer Dereference

Because they are very similar, this warning shares annotations with warning 173.28795.
CodeSonar has selected warning 173.28795 to represent this group of similar warnings. In order to edit this group, you must edit warning 173.28795.