Text  |   XML   |   Visible Warnings:

pvm3.4.6 : pvm3.4.6 analysis 2 : File System Race Condition  at lpvm.c:3175

Categories: IO.RACE CWE:367
Warning ID: 352.29038
Similar Warnings: 352.29037
Procedure: pvmbeatask
Trace: view
Modified: Thu Nov 26 11:30:00 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/lpvm.c
   Enter pvmbeatask
 2999 pvmbeatask() 
 3000 {
 3001         int sbf = 0, rbf = 0;                   /* saved rx and tx message handles */ 
 3002         int prver;                                              /* protocol version */ 
 3003         int cookie;                                             /* cookie assigned by pvmd for ident */ 
 3004         int cc;
 3005         char **ep=0;
 3006         char authfn[PVMTMPNAMLEN];      /* auth file name */ 
 3007         int authfd = -1;                                /* auth fd to validate pvmd ident */ 
 3008         int i;
 3009         char buf[16];                                   /* for converting sockaddr */ 
 3010         char *p;
 3011         struct pvmminfo minfo;
 3012         int outtid, outctx, outtag;
 3013         int trctid, trcctx, trctag;
 3014         int need_trcinfo = 0;
 3015         int new_tracer = 0;
 3016         char tmask[ 2 * TEV_MASK_LENGTH ];
 3017         int tbuf, topt;
 3018         int mid;
 3019 #ifdef IMA_BEOLIN 
 3020         struct hostent *hostaddr;
 3021         char namebuf[128]; 
 3022 #endif 
 3023         TEV_DECLS 
 3024 #ifdef WIN32 
 3025  
 3026    /*   WSAStartup has to be called before any socket command 
 3027                 can be executed. Why ? Ask Bill 
 3028    */ 
 3029         for (ep=environ;*ep;ep++)
 3030                 pvmputenv(*ep);    
 3031    if (WSAStartup(0x0101, &WSAData) != 0)
 3032         {
 3033       fprintf(stderr,"\nWSAStartup() failed\n");
 3034       ExitProcess(1);
 3035         } 
 3036         /* setsockopt(INVALID_SOCKET,SOL_SOCKET,SO_OPENTYPE, */ 
 3037         /*      (char *)&nAlert,sizeof(int)); */ 
 3038  
 3039 #endif 
 3040 /*
 3041         pvm_setopt(PvmDebugMask, -1);
 3042 */ 
 3043         if (pvmmytid != -1)
 3044                 return 0;
 3045  
 3046         pvmmydsig = pvmgetdsig();
 3047  
 3048         TEV_EXCLUSIVE;
 3049  
 3050         authfn[0] = 0;
 3051  
 3052 #ifndef WIN32 
 3053         pvmmyupid = getpid();
 3054 #else 
 3055         pvmmyupid = _getpid();     /* .... */ 
 3056 #endif 
 3057  
 3058         /*
 3059         * get expected pid from environment in case we were started by 
 3060         * the pvmd and someone forked again 
 3061         */ 
 3062  
 3063         if (p = getenv("PVMEPID"))
 3064                 cookie = atoi(p);
 3065         else 
 3066                 cookie = 0;
 3067  
 3068         /* if ((pvm_useruid = getuid()) == -1) */ 
 3069  
 3070 #ifndef WIN32 
 3071         if ((pvm_useruid = geteuid()) == -1) {
 3072                 pvmlogerror("can't getuid()\n");
 3073                 cc = PvmSysErr;
 3074                 goto bail2;
 3075         }
 3076         pvmchkuid( pvm_useruid );
 3077 #else 
 3078         if (!username)
 3079                 username = MyGetUserName(); 
 3080 #endif 
 3081  
 3082         if (p = getenv("PVMTASKDEBUG")) {
 3083                 pvmdebmask = pvmstrtoi(p);
 3084                 if (pvmdebmask) {
 3085                         pvmlogprintf("task debug mask is 0x%x (%s)\n",
 3086                                         pvmdebmask, debug_flags(pvmdebmask));
 3087                 }
 3088         }
 3089  
 3090 #ifndef IMA_MPP 
 3091         if (cc = mksocs())              /* make socket to talk to pvmd */ 
 3092                 goto bail2;
 3093 #endif 
 3094  
 3095         /*
 3096         *       initialize received-message list 
 3097         */ 
 3098  
 3099         pvmrxlist = pmsg_new(1);
 3100         BZERO((char*)pvmrxlist, sizeof(struct pmsg));   /* Null Pointer Dereference (ID: 22107.29040) */
 3101         pvmrxlist->m_link = pvmrxlist->m_rlink = pvmrxlist;
 3102  
 3103         ttlist = TALLOC(1, struct ttpcb, "tpcb");
 3104         BZERO((char*)ttlist, sizeof(struct ttpcb));   /* Null Pointer Dereference (ID: 354.29039) */
 3105         ttlist->tt_link = ttlist->tt_rlink = ttlist;
 3106  
 3107         sbf = pvm_setsbuf(pvm_mkbuf(PvmDataFoo));
 3108         rbf = pvm_setrbuf(0);
 3109  
 3110         /*
 3111         *       create empty t-auth file that pvmd must write and we'll check later 
 3112         */ 
 3113  
 3114 #ifndef IMA_MPP 
 3115 #ifndef NOPROT 
 3116         (void)PVMTMPNAMFUN(authfn);
 3117 #ifdef IMA_OS2 
 3118         if ((authfd = open(authfn, O_RDWR|O_CREAT|O_EXCL|O_TRUNC, 0600)) == -1) 
 3119 #else 
true3120         if ((authfd = open(authfn, O_RDONLY|O_CREAT|O_EXCL|O_TRUNC, 0600)) == -1)
 3121 #endif 
 3122         {
 3123                 pvmlogperror(authfn);
 3124                 pvmlogerror("pvmbeatask() can't creat t-auth file\n");
 3125                 cc = PvmSysErr;
 3126                 goto bail2;
 3127         }
 3128 #endif 
 3129  
 3130         /*
 3131         *       send first connect message to pvmd 
 3132         */ 
 3133  
 3134         mxfersingle = 1;
 3135         prver = TDPROTOCOL;
 3136         pvm_pkint(&prver, 1, 1);
 3137         pvm_pkstr(authfn);
 3138         if ((cc = msendrecv(TIDPVMD, TM_CONNECT, SYSCTX_TM)) <= 0)
 3139                 goto bail;
 3140         pvm_upkint(&prver, 1, 1);
 3141         if (prver != TDPROTOCOL) {
 3142                 pvmlogprintf("pvmbeatask() t-d protocol mismatch (%d/%d)\n",
 3143                         TDPROTOCOL, prver);
 3144                 cc = PvmSysErr;
 3145                 goto bail;
 3146         }
 3147         pvm_upkint(&cc, 1, 1);
 3148         if (!cc) {
 3149                 pvmlogerror("pvmbeatask() pvmd refuses connection\n");
 3150                 cc = PvmSysErr;
 3151                 goto bail;
 3152         }
 3153  
 3154         /*
 3155         *       check our t-auth file; write in pvmd d-auth file 
 3156         */ 
 3157  
 3158 #ifndef NOPROT 
 3159  
 3160 #ifdef IMA_BEOLIN 
 3161         sleep(15);  /* because of race condition over NFS--yuck! (PLS) */ 
 3162 #endif 
 3163  
 3164         if ((cc = read(authfd, (char*)&cc, 1)) == -1) {
 3165                 pvmlogperror("pvmbeatask() read authfile");
 3166                 cc = PvmSysErr;
 3167                 goto bail;
 3168         }
 3169         if (cc != 1) {
 3170                 pvmlogerror("pvmbeatask() pvmd didn't validate itself\n");
 3171                 cc = PvmSysErr;
 3172                 goto bail;
 3173         }
 3174         (void)close(authfd);
authfn[0] is accessed by path name3175         (void)unlink(authfn);     /* File System Race Condition */
Preconditions
&$unknown_1374862 != 0
&$unknown_1374864 = &$unknown_1374865 + 92
&$unknown_1374874 >= 1
&$unknown_1374875 != 0
((char*)&$heap_348295)[1] <= 120
((char*)&$heap_348295)[1] >= 48
myfmt != -1
pvmmytid = -1
pvmrbuf = 0
pvmtoplvl = 0
$input_12 >= 1
$input_295716 <= 97
$input_295716 >= 0
$input_295732 = 1
$input_444 = 48
$input_852 = 0
Postconditions
((char*)$unknown_1374865)[4]' = &$unknown_1374864
((char*)&$unknown_1374864)[4]' = ((char*)&$unknown_1374865)[4]
((char*)&$unknown_1374865)[20]' = 1
((char*)&$unknown_1374865)[32]' = 0
((char*)&$unknown_1374865)[44]' = 0
((char*)&$unknown_1374865)[52]' = 0
((char*)&$unknown_1374865)[60]' = 0
((char*)&$unknown_1374865)[64]' = 0
authfd' = &$heap_348298 - 4096
authfn[0]' = 0
strlen(&authfn[0])' = $input_295716 + 30
authfn[0]' is accessed by path name
buf[0]' = 0
strlen(&buf[0])' = 0
cc' = $input_295732
strlen(&cc)' = $input_852
cookie' = 0
ep' = 0
$heap_348295' = $input_444
bytes_after(&$heap_348295)' = $input_12 + 1
$heap_348295' is allocated by malloc
$heap_348295' is a non-heap object
bytes_before(&$heap_348295)' = 0
strlen(&$heap_348295)' = $input_12
$heap_348296' = &$heap_348296
bytes_after(&$heap_348296)' = 64
$heap_348296' is allocated by malloc
$heap_348296' is allocated
bytes_before(&$heap_348296)' = 0
((char*)&$heap_348296)[4]' = &$heap_348296
$heap_348298' is allocated by open
$heap_348298' is freed
mxfersingle' = 1
need_trcinfo' = 0
new_tracer' = 0
nextwaitid' = nextwaitid + 1
p' = &$heap_348295
prver' = 1318
pvm_useruid' != -1
pvmampushed' = 0
pvmamtraced' = pvmtoplvl
pvmdebmask' = &$unknown_1374862
pvmmydsig' = myfmt
pvmrbuf' = &$unknown_1374875
pvmrxlist' = &$unknown_1374865
rbf' = 0
ttlist' = &$heap_348296




Change Warning 352.29038 : File System Race Condition

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