Text  |   XML   |   Visible Warnings:

Pvm : Pvm analysis 1 : Leak  at ddpro.c:3053

Categories: LANG.ALLOC.LEAK CWE:401 CWE:771 CWE:773
Warning ID: 2588.2620
Procedure: dm_db
Trace: View
Modified: Wed Sep 2 12:41:52 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 */ 
   ...
 3040  
 3041                 }
 3042                 pkint(mp2, req);
 3043                 break;
 3044  
 3045         case TMDB_REMOVE
 3046                 req = mb_delete(tid, name, req, flags);
 3047                 pkint(mp2, req);
 3048                 break;
 3049  
 3050         case TMDB_GET: 
 3051                 cc = mb_lookup(tid, name, req, flags, &mp3);
 3052                 if ( cc == PvmNotFound && (flags & PvmMboxWaitForInfo) ) {
allocated inside call3053                         ep = me_new(req);     /* Leak */
     /u1/paul/SATE/2010/c/pvm/pvm3/src/msgbox.c
     Enter dm_db / me_new
 240   struct pvmmentry * 
 241   me_new(ind) 
 242           int ind;
 243   {
 244           struct pvmmentry *ep;
 245    
referenced by returned value246           if (ep = TALLOC(1, struct pvmmentry, "pvmmentry")) {
referenced by ep and 1 others247                   ep->me_link = ep->me_rlink = ep;
referenced by ep and 2 others248                   ep->me_tid = 0;
 249                   ep->me_savetid = 0;
 250                   ep->me_flags = PvmMboxDefault;
 251                   ep->me_msg = 0;
 252                   ep->me_ind = ind;
 253           }
 254           return ep;
referenced by *****$heap_38763 and 1 others255   } 
     Exit dm_db / me_new
referenced by ep and 2 others3054                         ep->me_tid = tid;   /* Null Pointer Dereference (ID: 2596.2630) */
 3055                         ep->me_msg = (struct pmsg *) name;  /* XXX ouch, overload */ 
 3056                         ep->me_flags = flags;
 3057  
 3058                         wp = wait_new(WT_RECVINFO);
 3059                         wp->wa_on = tid;
 3060                         wp->wa_tid = pvmmytid;
 3061                         wp->wa_dep = mp->m_wid;
 3062                         wp->wa_mesg = mp2;
referenced by ep and 3 others3063                         wp->wa_spec = (void *) ep;
 3064  
 3065                         return 0;
 3066                 } else {
 3067                         pkint(mp2, cc);
 3068                         if (mp3) {
 3069                                 pmsg_pack(mp2, mp3);
 3070                                 pmsg_unref(mp3);
 3071                         }
 3072                 }
 3073                 break;
 3074  
 3075         case TMDB_NAMES
   ...
 3158         return 0;
 3159  
 3160 badformat
 3161         pvmlogerror("dm_db() bad msg format\n");
 3162  
 3163         if (name)
 3164                 PVM_FREE(name);
 3165         if (mp2)
 3166                 pmsg_unref(mp2);
 3167         return 0;
 3168 } 
Preconditions
&$unknown_716588 >= 1
pvmmboxclasses->mc_link->mc_ent->me_link->me_ind = -32
pvmmboxclasses->mc_link->mc_ent->me_link != pvmmboxclasses->mc_link->mc_ent
pvmmboxclasses->mc_link != pvmmboxclasses
numfrags = 0
numpmsgs != 0
widrange >= lastwid + 1
Postconditions
freepmsgs.m_link->m_link->m_rlink' = freepmsgs.m_link->m_rlink
freepmsgs.m_link->m_tag' = -2147352552
freepmsgs.m_link->m_rlink->m_link' = freepmsgs.m_link->m_link
bytes_after(&$heap_38765)' = &$unknown_716588
$heap_38765' is allocated by malloc
bytes_before(&$heap_38765)' = 0




Change Warning 2588.2620 : Leak

Priority:
State:
Finding:
Owner:
Note: