Text  |   XML   |   Visible Warnings:

pvm3.4.6 : pvm3.4.6 analysis 2 : Integer Overflow of Allocation Size  at trcfile.c:1371

Categories: ALLOC.IOAS BSI:MALLOC-OVERFLOW CWE:680
Warning ID: 22158.29167
Procedure: trc_store_trace_event
Trace: view
Modified: Thu Nov 26 11:35:32 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/tracer/trcfile.c
   Enter trc_store_trace_event
 964 trc_store_trace_event( ID, TD, tid, omit ) 
 965 TRC_ID ID;
 966 TRC_TEVDESC TD;
 967 int tid;
 968 int omit;
 969 {
 970         TRC_DATADESC DD;
 971  
 972         TRC_TEVTASK TT;
 973  
 974         char    upk_byte[TRC_MAX_UNPACK_ARR_SIZE];
   ...
 989         int maxlen;
 990         int ignore;
 991         int tusec;
 992         int tsec;
 993         int len;
 994         int num;
 995         int i;
 996  
 997         /* Dump Descriptor (if necessary) */ 
 998  
 999         if ( !omit && TD->dump )
 1000                 trc_dump_tevdesc( ID, TD, tid );
 1001  
 1002         /* Set New Task Flag */ 
 1003  
 1004         TT = (TRC_TEVTASK) NULL;
 1005  
 1006         tsec = tusec = -1;
 1007  
 1008         newtask = TRC_FALSE;
 1009         endtask = TRC_FALSE;
 1010  
 1011         if ( !strcmp( TD->name, "newtask" ) 
 1012                 || !strcmp( TD->name, "spntask" ) )
 1013         {
 1014                 newtask = TRC_TRUE;
 1015         }
 1016  
 1017         else if ( !strcmp( TD->name, "endtask" ) )
 1018                 endtask = TRC_TRUE;
 1019  
 1020         ignore = TRC_FALSE;
 1021  
 1022         /* Store Event Header */ 
 1023  
 1024         if ( !omit )
 1025                 trc_store_event_header( ID, TD, tid );
 1026  
 1027         /* Store Remainder of Event */ 
 1028  
 1029         DD = TD->ddesc;
 1030  
 1031         while ( DD != NULL )
 1032         {
 1033                 if ( DD->array == TEV_DATA_ARRAY )
 1034                 {
 1035                         TRC_PVMCKERR( pvm_upkint( &num, 1, 1 ),
 1036                                 "Array Unpack", return( TRC_FALSE ) );
 1037  
 1038                         if ( num > TRC_MAX_UNPACK_ARR_SIZE   /* Uninitialized Variable (ID: 22163.29172) */
 1039                                 && DD->dt != TEV_DATA_STRING )
 1040                         {
 1041                                 if ( !omit )
 1042                                         printf( "Error: Unpack Size %d Too Large\n", num );
 1043  
 1044                                 return( TRC_FALSE );
 1045                         }
 1046  
 1047                         if ( !omit )
 1048                         {
 1049                                 if ( DD->dt == TEV_DATA_CPLX 
 1050                                         || DD->dt == TEV_DATA_DCPLX )
 1051                                 {
 1052                                         fprintf( ID->trace_out, "[%d] { ", num * 2 );
 1053                                         /* matching } */ 
 1054                                 }
 1055  
 1056                                 else if ( DD->dt == TEV_DATA_STRING )
 1057                                         fprintf( ID->trace_out, "[%d] ", num );
 1058  
 1059                                 else if ( DD->dt == TEV_DATA_BYTE )
 1060                                 {
 1061                                         fprintf( ID->trace_out, "[%d] { ", num + 1 );
 1062                                         /* matching } */ 
 1063                                 }
 1064  
 1065                                 else 
 1066                                 {
 1067                                         fprintf( ID->trace_out, "[%d] { ", num );
 1068                                         /* matching } */ 
 1069                                 }
 1070                         }
 1071                 }
 1072  
 1073                 else 
 1074                         num = 1;
 1075  
 1076                 switch ( DD->dt ) 
 1077                 {
 1078                         case TEV_DATA_NULL: break;
 1079  
 1080                         case TEV_DATA_BYTE: 
 1081                         {
 1082                                 TRC_PVMCKERR( pvm_upkbyte( upk_byte, num, 1 ),
 1083                                         "Event BYTE Unpack", return( TRC_FALSE ) );
 1084  
 1085                                 if ( omit )
 1086                                         break;
 1087  
 1088                                 if ( DD->array == TEV_DATA_ARRAY )
 1089                                         fprintf( ID->trace_out, "\"" );
 1090  
 1091                                 for ( i=0 ; i < num ; i++ )
 1092                                         fprintf( ID->trace_out, "%c", upk_byte[i] );
 1093  
 1094                                 if ( DD->array == TEV_DATA_ARRAY )
 1095                                         fprintf( ID->trace_out, "\"" );
 1096  
 1097                                 break;
 1098                         }
 1099  
 1100                         case TEV_DATA_CPLX: 
 1101                         {
 1102                                 TRC_PVMCKERR( pvm_upkfloat( upk_float, num * 2, 1 ),
 1103                                         "Event CPLX Unpack", return( TRC_FALSE ) );
 1104  
 1105                                 if ( omit )
 1106                                         break;
 1107  
 1108                                 for ( i=0 ; i < num ; i++ )
 1109                                 {
 1110                                         fprintf( ID->trace_out, "%f, %f",
 1111                                                 upk_float[ 2 * i ],
 1112                                                 upk_float[ (2 * i) + 1 ] );
 1113  
 1114                                         if ( i < num - 1 )
 1115                                                 fprintf( ID->trace_out, ", " );
 1116                                 }
 1117  
 1118                                 break;
 1119                         }
 1120  
 1121                         case TEV_DATA_DCPLX: 
 1122                         {
 1123                                 TRC_PVMCKERR( pvm_upkdouble( upk_double, num * 2, 1 ),
 1124                                         "Event DCPLX Unpack", return( TRC_FALSE ) );
 1125  
 1126                                 if ( omit )
 1127                                         break;
 1128  
 1129                                 for ( i=0 ; i < num ; i++ )
 1130                                 {
 1131                                         fprintf( ID->trace_out, "%lf, %lf",
 1132                                                 upk_double[ 2 * i ],
 1133                                                 upk_double[ (2 * i) + 1 ] );
 1134  
 1135                                         if ( i < num - 1 )
 1136                                                 fprintf( ID->trace_out, ", " );
 1137                                 }
 1138  
 1139                                 break;
 1140                         }
 1141  
 1142                         case TEV_DATA_DOUBLE: 
 1143                         {
 1144                                 TRC_PVMCKERR( pvm_upkdouble( upk_double, num, 1 ),
 1145                                         "Event DOUBLE Unpack", return( TRC_FALSE ) );
 1146  
 1147                                 if ( omit )
 1148                                         break;
 1149  
 1150                                 for ( i=0 ; i < num ; i++ )
 1151                                 {
 1152                                         fprintf( ID->trace_out, "%lf", upk_double[i] );
 1153  
 1154                                         if ( i < num - 1 )
 1155                                                 fprintf( ID->trace_out, ", " );
 1156                                 }
 1157  
 1158                                 break;
 1159                         }
 1160  
 1161                         case TEV_DATA_FLOAT: 
 1162                         {
 1163                                 TRC_PVMCKERR( pvm_upkfloat( upk_float, num, 1 ),
 1164                                         "Event FLOAT Unpack", return( TRC_FALSE ) );
 1165  
 1166                                 if ( omit )
 1167                                         break;
 1168  
 1169                                 for ( i=0 ; i < num ; i++ )
 1170                                 {
 1171                                         fprintf( ID->trace_out, "%f", upk_float[i] );
 1172  
 1173                                         if ( i < num - 1 )
 1174                                                 fprintf( ID->trace_out, ", " );
 1175                                 }
 1176  
 1177                                 break;
 1178                         }
 1179  
 1180                         case TEV_DATA_INT: 
 1181                         {
 1182                                 TRC_PVMCKERR( pvm_upkint( upk_int, num, 1 ),
 1183                                         "Event INT Unpack", return( TRC_FALSE ) );
 1184  
 1185                                 if ( !omit )
 1186                                 {
 1187                                         for ( i=0 ; i < num ; i++ )
 1188                                         {
 1189                                                 fprintf( ID->trace_out, "%d", upk_int[i] );
 1190  
 1191                                                 if ( i < num - 1 )
 1192                                                         fprintf( ID->trace_out, ", " );
 1193                                         }
 1194                                 }
 1195  
 1196                                 if ( ( newtask || endtask )
 1197                                         && !strcmp( DD->did->name, "TID" ) )
 1198                                 {
 1199                                         if ( !omit && newtask )
 1200                                         {
 1201                                                 TT = trc_get_tevtask_tid( ID, upk_int[0] );
 1202  
 1203                                                 if ( TT == NULL )
 1204                                                 {
 1205                                                         if ( !ignore )
 1206                                                         {
 1207                                                                 sprintf( msg,
 1208                                                                         "Task TID=0x%x Connected to %s",
 1209                                                                         upk_int[0], TRC_NAME );
 1210                                                                  
 1211                                                                 trc_status_msg( ID, msg );
 1212                                                         }
 1213  
 1214                                                         TT = trc_create_tevtask();
 1215  
 1216                                                         TT->tid = upk_int[0];
 1217  
 1218                                                         TT->outstatus = TRC_TASK_NOOUT;
 1219  
 1220                                                         TT->next = ID->tevtask_list;
 1221  
 1222                                                         ID->tevtask_list = TT;
 1223                                                 }
 1224  
 1225                                                 if ( !ignore )
 1226                                                         TT->tevstatus = TRC_TASK_ALIVE;
 1227                                          
 1228                                                 else 
 1229                                                         TT->tevstatus = TRC_TASK_IGNORE;
 1230                                         }
 1231  
 1232                                         if ( endtask )
 1233                                         {
 1234                                                 TT = trc_get_tevtask_tid( ID, upk_int[0] );
 1235  
 1236                                                 if ( TT != NULL )
 1237                                                 {
 1238                                                         if ( TT->tevstatus == TRC_TASK_ALIVE )
 1239                                                         {
 1240                                                                 TT->tevstatus = TRC_TASK_DEAD;
 1241  
 1242                                                                 trc_check_for_dead_host( ID, TT );
 1243  
 1244                                                                 if ( !trc_tevtasks_alive( ID ) )
 1245                                                                         trc_end_trace( ID );
 1246                                                         }
 1247  
 1248                                                         else 
 1249                                                                 TT->tevstatus = TRC_TASK_DEAD;
 1250                                                 }
 1251  
 1252                                                 else if ( !omit )
 1253                                                 {
 1254                                 printf( "\nWarning: ENDTASK Unknown Task TID=0x%x.\n\n",
 1255                                                         upk_int[0] );
 1256                                                 }
 1257                                         }
 1258                                 }
 1259  
 1260                                 else if ( !strcmp( DD->did->name, "TS" ) )
 1261                                         tsec = upk_int[0];   /* Uninitialized Variable (ID: 22161.29170) */
 1262                                  
 1263                                 else if ( !strcmp( DD->did->name, "TU" ) )
 1264                                         tusec = upk_int[0];   /* Uninitialized Variable (ID: 22159.29168) */
 1265  
 1266                                 break;
 1267                         }
 1268  
 1269                         case TEV_DATA_UINT: 
 1270                         {
 1271                                 TRC_PVMCKERR( pvm_upkint( upk_int, num, 1 ),
 1272                                         "Event UINT Unpack", return( TRC_FALSE ) );
 1273  
 1274                                 if ( omit )
 1275                                         break;
 1276  
 1277                                 for ( i=0 ; i < num ; i++ )
 1278                                 {
 1279                                         fprintf( ID->trace_out, "%u",
 1280                                                 (unsigned) upk_int[i] );
 1281  
 1282                                         if ( i < num - 1 )
 1283                                                 fprintf( ID->trace_out, ", " );
 1284                                 }
 1285  
 1286                                 break;
 1287                         }
 1288  
 1289                         case TEV_DATA_LONG: 
 1290                         {
 1291                                 TRC_PVMCKERR( pvm_upklong( upk_long, num, 1 ),
 1292                                         "Event LONG Unpack", return( TRC_FALSE ) );
 1293  
 1294                                 if ( omit )
 1295                                         break;
 1296  
 1297                                 for ( i=0 ; i < num ; i++ )
 1298                                 {
 1299                                         fprintf( ID->trace_out, "%ld", upk_long[i] );
 1300  
 1301                                         if ( i < num - 1 )
 1302                                                 fprintf( ID->trace_out, ", " );
 1303                                 }
 1304  
 1305                                 break;
 1306                         }
 1307  
 1308                         case TEV_DATA_ULONG: 
 1309                         {
 1310                                 TRC_PVMCKERR( pvm_upklong( upk_long, num, 1 ),
 1311                                         "Event ULONG Unpack", return( TRC_FALSE ) );
 1312  
 1313                                 if ( omit )
 1314                                         break;
 1315  
 1316                                 for ( i=0 ; i < num ; i++ )
 1317                                 {
 1318                                         fprintf( ID->trace_out, "%ld", upk_long[i] );
 1319  
 1320                                         if ( i < num - 1 )
 1321                                                 fprintf( ID->trace_out, ", " );
 1322                                 }
 1323  
 1324                                 break;
 1325                         }
 1326  
 1327                         case TEV_DATA_SHORT: 
 1328                         {
 1329                                 TRC_PVMCKERR( pvm_upkshort( upk_short, num, 1 ),
 1330                                         "Event SHORT Unpack", return( TRC_FALSE ) );
 1331  
 1332                                 if ( omit )
 1333                                         break;
 1334  
 1335                                 for ( i=0 ; i < num ; i++ )
 1336                                 {
 1337                                         fprintf( ID->trace_out, "%d", upk_short[i] );
 1338  
 1339                                         if ( i < num - 1 )
 1340                                                 fprintf( ID->trace_out, ", " );
 1341                                 }
 1342  
 1343                                 break;
 1344                         }
 1345  
 1346                         case TEV_DATA_USHORT: 
 1347                         {
 1348                                 TRC_PVMCKERR( pvm_upkshort( upk_short, num, 1 ),
 1349                                         "Event USHORT Unpack", return( TRC_FALSE ) );
 1350  
 1351                                 if ( omit )
 1352                                         break;
 1353  
 1354                                 for ( i=0 ; i < num ; i++ )
 1355                                 {
 1356                                         fprintf( ID->trace_out, "%u", upk_short[i] );
 1357  
 1358                                         if ( i < num - 1 )
 1359                                                 fprintf( ID->trace_out, ", " );
 1360                                 }
 1361  
 1362                                 break;
 1363                         }
 1364  
 1365                         case TEV_DATA_STRING: 
 1366                         {
 1367                                 if ( num < 1 )
 1368                                         break;
 1369  
 1370                                 strarr = (char **) malloc( (unsigned) num 
true1371                                                 * sizeof(char *) );     /* Integer Overflow of Allocation Size */  /* Leak (ID: 22156.29165) */
 1372                                 trc_memcheck( strarr, "String Array" );
 1373  
 1374                                 maxlen = 0;
 1375  
 1376                                 for ( i=0 ; i < num ; i++ )
 1377                                 {
 1378                                         TRC_PVMCKERR( pvm_upkstr( upk_str ),
 1379                                                 "Event STRING Unpack", return( TRC_FALSE ) );
 1380  
 1381                                         if ( (len = strlen( upk_str )) > maxlen )   /* Uninitialized Variable (ID: 22162.29171) */
 1382                                                 maxlen = len;
 1383  
 1384                                         strarr[i] = trc_copy_str( upk_str );
 1385                                 }
 1386  
 1387                                 if ( !omit && newtask 
 1388                                         && !strcmp( DD->did->name, "TN" ) )
 1389                                 {
 1390                                         if ( !(ID->group_tasks) 
 1391                                                 && TRC_GROUPTASK( upk_str ) )
 1392                                         {
 1393                                                 ignore = TRC_TRUE;
 1394  
 1395                                                 if ( TT != NULL )
 1396                                                 {
 1397                                                         sprintf( msg,
 1398                                                                 "Ignoring Task \"%s\"", upk_str );
 1399  
 1400                                                         trc_status_msg( ID, msg );
 1401  
 1402                                                         TT->tevstatus = TRC_TASK_IGNORE;
 1403                                                 }
 1404                                         }
 1405                                 }
 1406  
 1407                                 if ( !omit )
 1408                                 {
 1409                                         fprintf( ID->trace_out, "[%d] { ", maxlen + 1 );
 1410  
 1411                                         for ( i=0 ; i < num ; i++ )
 1412                                         {
 1413                                                 fprintf( ID->trace_out, "\"%s\"", strarr[i] );
 1414  
 1415                                                 if ( i < num - 1 )
 1416                                                         fprintf( ID->trace_out, ", " );
 1417  
 1418                                                 free( strarr[i] );
 1419                                         }
 1420  
 1421                                         if ( DD->array == TEV_DATA_SCALAR )
 1422                                                 fprintf( ID->trace_out, " }" );
 1423                                 }
 1424  
 1425                                 else 
 1426                                 {
 1427                                         for ( i=0 ; i < num ; i++ )
 1428                                                 free( strarr[i] );
 1429                                 }
 1430  
 1431                                 free( strarr );
 1432  
 1433                                 break;
 1434                         }
 1435  
 1436                         case TEV_DATA_STRUCT_START: 
 1437                         case TEV_DATA_STRUCT_END: 
 1438                         case TEV_DATA_DEFERRED: 
 1439                         {
 1440                                 if ( !omit )
 1441                                         printf( "DT Not Impl\n" );
 1442  
 1443                                 break;
 1444                         }
 1445  
 1446                         default: 
 1447                         {
 1448                                 if ( !omit )
 1449                                         printf( "DT Unknown\n" );
 1450                         }
 1451                 }
 1452  
 1453                 if ( !omit )
 1454                 {
 1455                         /* matching { */ 
 1456  
 1457                         if ( DD->array == TEV_DATA_ARRAY )
 1458                                 fprintf( ID->trace_out, " }" );
 1459  
 1460                         if ( DD->next != NULL )
 1461                                 fprintf( ID->trace_out, ", " );
 1462                 }
 1463  
 1464                 DD = DD->next;
Preconditions
omit = 0
&$unknown_11693756 >= 1025
ID->event_dump_hdr = 0
TD->dump = 0
TD->index >= 0
((char*)&((char*)$unknown_11693754)[20])[4] = 12
((char*)&((char*)$unknown_11693754)[20])[8] = 128
*TD->name = 115
strlen(*TD) = 7
pvmtoplvl != 0
$input_12 = 0
Postconditions
DD' = ((char*)&$unknown_11693754)[20]
TRC_TMP_CC' = 0
$unknown_11693757' is allocated by fopen
bytes_before(&$unknown_11693757)' = 0
endtask' = 0
newtask' = 1
num' = &$unknown_11693756
pvmtrc.trctid' >= 1
pvmtrccodef' = &$unknown_11693755




Change Warning 22158.29167 : Integer Overflow of Allocation Size

Priority:
State:
Finding:
Owner:
Note: