Text  |   XML   |   Visible Warnings:

pvm3.4.6 : pvm3.4.6 analysis 2 : Unreachable Call  at pvmd.c:3283

Categories: LANG.STRUCT.UC CWE:561
Warning ID: 88.28680
Procedure: loclinput
Trace: view
Modified: Thu Nov 26 11:27:22 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     
LineSource
  /kat0/fletcher/SATE/2010/pvm3/src/pvmd.c
  Enter loclinput
3151 loclinput(tp) 
3152         struct task *tp;
3153 {
3154         struct pkt *pp = 0;
3155         struct pkt *pp2;
3156         int n, m;
3157  
3158 again: 
3159         /*
3160         * if no current packet, start a new one 
3161         */ 
3162  
3163         if (!tp->t_rxp) {
3164                 tp->t_rxp = pk_new(pvmudpmtu);
3165 /*
3166                 tp->t_rxp = pk_new(TDFRAGHDR + 2);
3167 */ 
3168                 if (DDFRAGHDR > TDFRAGHDR)
3169                         tp->t_rxp->pk_dat += DDFRAGHDR - TDFRAGHDR;   /* Unreachable Computation (ID: 89.28679) */
3170         }
3171         pp = tp->t_rxp;
3172  
3173         /*
3174         * read the fragment header and body separately so we can 
3175         * make a bigger buffer if needed 
3176         */ 
3177  
3178         n = (pp->pk_len < TDFRAGHDR) ? 0 : pvmget32(pp->pk_dat + 8);
3179         n += TDFRAGHDR - pp->pk_len;
3180         if (pvmdebmask & PDMPACKET) {
3181                 pvmlogprintf("loclinput() t%x fr_len=%d fr_dat=+%d n=%d\n",
3182                                 tp->t_tid, pp->pk_len, pp->pk_dat - pp->pk_buf, n);
3183         }
3184 #ifndef WIN32 
3185         n = read(tp->t_sock, pp->pk_dat + pp->pk_len, n);
3186 #else 
3187         n = win32_read_socket(tp->t_sock,pp->pk_dat + pp->pk_len,n); 
3188 #endif 
3189         if (pvmdebmask & PDMPACKET) {
3190                 if (n >= 0) {
3191                         pvmlogprintf("loclinput() read=%d\n", n);
3192                 } else 
3193                         pvmlogperror("loclinput() read");
3194         }
3195  
3196 #ifdef  STATISTICS 
3197                 switch (n) {
3198                 case -1: 
3199                         stats.rdneg++;
3200                         break;
3201                 case 0: 
3202                         stats.rdzer++;
3203                         break;
3204                 default: 
3205                         stats.rdok++;
3206                         break;
3207                 }
3208 #endif 
3209         if (n == -1) {
3210                 if (errno != EINTR 
3211 #ifndef WIN32 
3212                                 && errno != EWOULDBLOCK 
3213 #endif 
3214                 ) {
3215                         pvmlogperror("loclinput() read");
3216                         pvmlogprintf("loclinput() marking t%x dead\n",
3217                                         tp->t_tid);
3218                         return -1;
3219                 }
3220                 return 0;
3221         }
3222         if (!n) {
3223                 if (pvmdebmask & (PDMPACKET|PDMMESSAGE|PDMTASK)) {
3224                         pvmlogprintf("loclinput() read EOF from t%x sock %d\n",
3225                                         tp->t_tid, tp->t_sock);
3226                 }
3227                 return -1;
3228         }
3229  
3230         if ((pp->pk_len += n) < TDFRAGHDR)
3231                 return 0;
3232  
3233         /*
3234         * if we have a complete frag, accept it 
3235         */ 
3236  
3237         m = TDFRAGHDR + pvmget32(pp->pk_dat + 8);
3238         if (pp->pk_len == m) {
3239                 tp->t_rxp = 0;
3240                 pp->pk_dst = pvmget32(pp->pk_dat);
3241 #if defined(IMA_PGON) || defined(IMA_I860) || defined(IMA_CM5) \
3242                 || defined(IMA_SP2MPI) || defined(IMA_AIX4SP2) \
3243                 || defined(IMA_AIX5SP2) 
3244                 pp->pk_src = pvmget32(pp->pk_dat + 4); 
3245 #else 
3246                 pp->pk_src = tp->t_tid;
3247 #endif 
3248                 pp->pk_flag = pvmget8(pp->pk_dat + 12);
3249                 pp->pk_len -= TDFRAGHDR;
3250                 pp->pk_dat += TDFRAGHDR;
3251                 if (pp->pk_flag & FFSOM) {
3252                         if (pp->pk_len < MSGHDRLEN) {
3253                                 pvmlogprintf( 
3254                                                 "loclinput() SOM pkt src t%x dst t%x too short\n",
3255                                                 pp->pk_src, pp->pk_dst);
3256                                 pk_free(pp);
3257                                 return 0;
3258                         }
3259                         pp->pk_enc = pvmget32(pp->pk_dat);
3260                         pp->pk_tag = pvmget32(pp->pk_dat + 4);
3261                         pp->pk_ctx = pvmget32(pp->pk_dat + 8);
3262                         pp->pk_wid = pvmget32(pp->pk_dat + 16);
3263                         pp->pk_crc = pvmget32(pp->pk_dat + 20);
3264                         pp->pk_len -= MSGHDRLEN;
3265                         pp->pk_dat += MSGHDRLEN;
3266                 }
3267                 if (loclinpkt(tp, pp))
3268                         return -1;
3269                 return 0;
3270         }
3271  
3272         /* realloc buffer if frag won't fit */ 
3273  
3274         if (pp->pk_len == TDFRAGHDR) {
3275                 if (m > pp->pk_max - (pp->pk_dat - pp->pk_buf)) {
3276                         if (!(tp->t_flag & TF_CONN)) {
3277                                 pvmlogprintf( 
3278                                         "loclinput() unconnected task sends frag length %d (ha)\n",
3279                                         m);
3280                                 return -1;
3281                         }
3282                         if (DDFRAGHDR > TDFRAGHDR) {
3283                                 pp2 = pk_new(m + DDFRAGHDR - TDFRAGHDR);     /* Unreachable Call */
3284                                 pp2->pk_dat += DDFRAGHDR - TDFRAGHDR;
3285                         } else 
3286                                 pp2 = pk_new(m);
3287                         BCOPY(pp->pk_dat, pp2->pk_dat, TDFRAGHDR);   /* Null Pointer Dereference (ID: 90.28681) */
3288                         pp2->pk_len = pp->pk_len;
3289                         pk_free(pp);
3290                         pp = tp->t_rxp = pp2;
3291                         if (pvmdebmask & PDMPACKET) {
3292                                 pvmlogprintf("loclinput() realloc frag max=%d\n", m);
3293                         }
3294                 }
3295                 goto again;
3296         }
3297  
3298         return 0;
3299 } 




Change Warning 88.28680 : Unreachable Call

Priority:
State:
Finding:
Owner:
Note: