Text  |   XML   |   Visible Warnings:

pvm3.4.6 : pvm3.4.6 analysis 2 : Leak  at pvmd.c:3777

Categories: ALLOC.LEAK CWE:401 CWE:771 CWE:773
Warning ID: 29.28612
Procedure: sendmessage
Trace: view
Modified: Thu Nov 26 11:27:05 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/pvmd.c
   Enter sendmessage
 3707 sendmessage(mp) 
 3708         struct pmsg *mp;
 3709 {
 3710         struct hostd *hp = 0;
 3711         struct task *tp;
 3712         struct frag *fp;
 3713         struct pkt *pp;
 3714         int ff = FFSOM;
 3715         int dst = mp->m_dst;   /* Null Pointer Dereference (ID: 310.28987) */  /* 13 more... */
 3716  
 3717         if (!dst) {
 3718                 pvmlogerror("sendmessage() what? to t0\n");
 3719         }
 3720  
 3721         if (pvmdebmask & PDMMESSAGE) {
 3722                 pvmlogprintf("sendmessage() dst t%x ctx %d tag %s len %d\n",
 3723                                 dst, mp->m_ctx, pvmnametag(mp->m_tag, (int *)0), mp->m_len);
 3724         }
 3725  
 3726         /*
 3727         *       add a frag to empty message to simplify handling 
 3728         */ 
 3729  
 3730         if ((fp = mp->m_frag->fr_link) == mp->m_frag) {
 3731                 fp = fr_new(MAXHDR);
 3732                 fp->fr_dat += MAXHDR;
 3733                 LISTPUTBEFORE(mp->m_frag, fp, fr_link, fr_rlink);
 3734         }
 3735  
 3736         /*
 3737         *       route message 
 3738         */ 
 3739  
 3740         if (!(dst & tidhmask) || (dst & tidhmask) == myhostpart) {      /* to local */ 
 3741  
 3742                 if (TIDISTASK(dst)) {                           /* to local task */ 
 3743  
 3744                         if (tp = task_find(dst)) {
 3745                                 mesg_to_task(tp, mp);
 3746  
 3747                         } else 
 3748                                 if (pvmdebmask & (PDMMESSAGE|PDMAPPL)) {
 3749                                         pvmlogprintf( 
 3750                                                         "sendmessage() scrapped, no such task t%x\n",
 3751                                                         dst);
 3752                                 }
 3753  
 3754                 } else {                                /* to myself */ 
 3755                         mp->m_ref++;
 3756                         mesg_rewind(mp);
 3757                         netentry(hosts->ht_hosts[hosts->ht_local], mp);
 3758                 }
 3759  
 3760         } else {                                        /* to remote */ 
 3761  
 3762         /* lookup host */ 
 3763  
 3764                 if (runstate == PVMDHTUPD)
 3765                         hp = tidtohost(newhosts, dst);
 3766                 if (!hp && !(hp = tidtohost(hosts, dst))) {
 3767                         if (pvmdebmask & (PDMMESSAGE|PDMAPPL)) {
 3768                                 pvmlogprintf("sendmessage() scrapped, no such host t%x\n",
 3769                                                 dst);
 3770                         }
 3771                         goto bail;
 3772                 }
 3773  
 3774         /* packetize frags */ 
 3775  
 3776                 do {
allocated inside call3777                         pp = pk_new(0);     /* Leak */
     /kat0/fletcher/SATE/2010/pvm3/src/pkt.c
     Enter sendmessage / pk_new
 105   struct pkt * 
 106   pk_new(len) 
 107           int len;        /* (max) buffer size or 0 */ 
 108   {
 109           struct pkt *pp;
 110    
referenced by returned value111           if (!(pp = TALLOC(1, struct pkt, "pkt")))
 112                   goto oops;
 113   /*
 114           BZERO((char*)pp, sizeof(struct pkt));
 115   */ 
 116    
referenced by pp117           if (len) {              /* slave pkt */ 
 118                   if (!(pp->pk_dat = pp->pk_buf = da_new(len))) {
 119                           PVM_FREE(pp);
 120                           goto oops;
 121                   }
 122                   pp->pk_max = len;
 123                   pp->pk_len = 0;
 124                   pp->pk_link = pp->pk_rlink = 0;
 125    
 126           } else {                /* master */ 
 127                   pp->pk_dat = pp->pk_buf = 0;
referenced by pp and 1 others128                   pp->pk_link = pp->pk_rlink = pp;
 129           }
referenced by pp130           pp->pk_cpos = 0;
 131           pp->pk_tlink = pp->pk_trlink = 0;
 132           return pp;
 133    
 134   oops: 
 135           pvmlogerror("pk_new() can't get memory\n");
 136           pvmbailout(0);
 137           return (struct pkt*)0;   /* Unreachable Computation (ID: 27.28610) */
referenced by returned value138   } 
     Exit sendmessage / pk_new
referenced by pp3778                         if (ff & FFSOM) {
 3779                                 pp->pk_enc = mp->m_enc;
 3780                                 pp->pk_tag = mp->m_tag;
 3781                                 pp->pk_ctx = mp->m_ctx;
 3782                                 pp->pk_wid = mp->m_wid;
 3783 #ifdef  MCHECKSUM 
 3784                                 pp->pk_crc = mesg_crc(mp); 
 3785 #else 
 3786                                 pp->pk_crc = 0;
 3787 #endif 
 3788                         }
 3789                         pp->pk_buf = fp->fr_buf;
 3790                         pp->pk_dat = fp->fr_dat;
 3791                         pp->pk_max = fp->fr_max;
 3792                         pp->pk_len = fp->fr_len;
 3793                         da_ref(pp->pk_buf);
 3794                         if (fp->fr_link == mp->m_frag)
 3795                                 ff |= FFEOM;
 3796                         pp->pk_src = mp->m_src;
 3797                         pp->pk_dst = dst;
 3798                         pp->pk_flag = ff;
 3799                         ff = 0;
 3800                         if (mp->m_flag & MM_PRIO) {
 3801                                 if (pvmdebmask & (PDMMESSAGE|PDMAPPL))
 3802                                         pvmlogerror("sendmessage() PRIO message to host? (scrapped)\n");
 3803  
 3804                         } else {
 3805                                 pkt_to_host(hp, pp);
 3806                         }
 3807                 } while ((fp = fp->fr_link) != mp->m_frag);
 3808         }
 3809  
 3810 bail: 
 3811         pmsg_unref(mp);
 3812         return 0;
 3813 } 
Preconditions
mp->m_ref <= 1
mp->m_dst = 0
hosts->ht_last >= 1
newhosts->ht_last >= 1
mp->m_frag->fr_link != mp->m_frag
mp->m_frag->fr_link->fr_link = mp->m_frag
runstate = 2
Postconditions
atnewline' = 1
freepmsgs.m_rlink' = $param_1
numpmsgs' = numpmsgs + 1
tmbuf.tm_sec' = &$unknown_2697




Change Warning 29.28612 : Leak

Priority:
State:
Finding:
Owner:
Note: