Text  |   XML   |   Visible Warnings:

Pvm : Pvm analysis 1 : Free Null Pointer  at ddpro.c:3149

Categories: LANG.ALLOC.FNP CWE:590
Warning ID: 2592.2625
Similar Warnings: 2592.2627
Procedure: dm_db
Trace: View
Modified: Wed Sep 2 12:41:57 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/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: 2599.2633) */
 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;
true3083                 noresets = TALLOC( nnr, int, "int" );
 3084                 for ( i=0 ; i < nnr ; i++ ) {
 3085                         if ( upkint(mp, &(noresets[i])) ) {
 3086                                 PVM_FREE(noresets);   /* Free Null Pointer (ID: 2592.2627) */
 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' || !strcmpnp->mc_name, name ) ) {   /* Null Pointer Dereference (ID: 2594.2628) */
 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...) */ 
   ...
 3139                                                                 mp4->m_wid = wp->wa_wid;
 3140                                                                 sendmessage(mp4);
 3141                                                         }
 3142                                                 }
 3143                                         }
 3144                                 }
 3145                                 }
 3146                         }
 3147                         }
 3148                 }
noresets <= 40953149                 PVM_FREE(noresets);     /* Free Null Pointer */
Preconditions
&$unknown_730882 >= 1
pvmmboxclasses->mc_link->mc_ent->me_link != pvmmboxclasses->mc_link->mc_ent
pvmmboxclasses->mc_link->mc_ent->me_link->me_link = pvmmboxclasses->mc_link->mc_ent
pvmmboxclasses->mc_link->mc_link = pvmmboxclasses
pvmmboxclasses->mc_link != pvmmboxclasses
$heap_39676 = 0
strlen(&$heap_39676) = 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_buf' = 0
freefrags.fr_link->fr_dat' = 0
freefrags.fr_link->fr_max' = 0
freefrags.fr_link->fr_len' = 0
freefrags.fr_link->fr_u.ref' = 1
freefrags.fr_link->fr_u.dab' = 1
freefrags.fr_link->fr_u.spr' = 0
freefrags.fr_link->fr_rip' = 0
freefrags.fr_link->fr_rlink' = freefrags.fr_link
freefrags.fr_link->fr_rlink->fr_link' = freefrags.fr_link->fr_link
freepmsgs.m_link->m_rlink->m_link' = freepmsgs.m_link->m_link
freefrags.fr_link->fr_link' = freefrags.fr_link
ep' = pvmmboxclasses->mc_link->mc_ent->me_link->me_link
ep2' = pvmmboxclasses->mc_link->mc_ent->me_link->me_link
bytes_after(&$heap_39676)' = &$unknown_730882
$heap_39676' is allocated by malloc
bytes_before(&$heap_39676)' = 0
hp' = $param_1
i' = 0
mp' = $param_2
mp2' = freepmsgs.m_link
mp3' = 0
mp4' = 0
name' = &$heap_39676
nnr' = 0
noresets' = 0
np' = pvmmboxclasses->mc_link->mc_link
np2' = pvmmboxclasses->mc_link->mc_link
numfrags' = numfrags - 1
numpmsgs' = numpmsgs - 1
opcode' = 5
req' <= -1




Change Warning 2592.2625 : Free Null Pointer

Because they are very similar, this warning shares annotations with warning 2592.2627.

Priority:
State:
Finding:
Owner:
Note: