PERFORCE change 90067 for review

Robert Watson rwatson at FreeBSD.org
Sat Jan 21 04:53:08 PST 2006


http://perforce.freebsd.org/chv.cgi?CH=90067

Change 90067 by rwatson at rwatson_sesame on 2006/01/21 12:52:09

	Avoid hard-coded assumptions about C type lengths; make sure to
	include nul terminations in buffer sizing.
	
	Submitted by:	phk
	Found with:	FlexeLint

Affected files ...

.. //depot/projects/trustedbsd/openbsm/libbsm/bsm_token.c#24 edit

Differences ...

==== //depot/projects/trustedbsd/openbsm/libbsm/bsm_token.c#24 (text+ko) ====

@@ -89,12 +89,13 @@
 	}
 
 	textlen = strlen(text);
-	GET_TOKEN_AREA(t, dptr, 9 + textlen);
+	textlen += 1;
+
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_char) +
+	    sizeof(u_int32_t) + sizeof(u_int16_t) + textlen);
 	if (t == NULL)
 		return (NULL);
 
-	textlen += 1;
-
 	ADD_U_CHAR(dptr, AUT_ARG32);
 	ADD_U_CHAR(dptr, n);
 	ADD_U_INT32(dptr, v);
@@ -118,12 +119,13 @@
 	}
 
 	textlen = strlen(text);
-	GET_TOKEN_AREA(t, dptr, 13 + textlen);
+	textlen += 1;
+
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_char) +
+	    sizeof(u_int64_t) + sizeof(u_int16_t) + textlen);
 	if (t == NULL)
 		return (NULL);
 
-	textlen += 1;
-
 	ADD_U_CHAR(dptr, AUT_ARG64);
 	ADD_U_CHAR(dptr, n);
 	ADD_U_INT64(dptr, v);
@@ -164,7 +166,8 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 29);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2*sizeof(u_int16_t) +
+	    3*sizeof(u_int32_t) + sizeof(u_int64_t) + sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -256,7 +259,7 @@
 
 	totdata = datasize * unit_count;
 
-	GET_TOKEN_AREA(t, dptr, totdata + 4);
+	GET_TOKEN_AREA(t, dptr, totdata + 4 * sizeof(u_char));
 	if (t == NULL)
 		return (NULL);
 
@@ -281,7 +284,7 @@
 	token_t *t;
 	u_char *dptr = NULL;
 
-	GET_TOKEN_AREA(t, dptr, 9);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -460,7 +463,7 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 29);
+	GET_TOKEN_AREA(t, dptr, 12 * sizeof(u_int16_t) + sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -505,7 +508,7 @@
 	u_char *dptr = NULL;
 
 
-	GET_TOKEN_AREA(t, dptr, 3);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -532,7 +535,7 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, bytes + 3);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) + bytes);
 	if (t == NULL)
 		return (NULL);
 
@@ -574,11 +577,13 @@
 		return (NULL);
 	}
 	filelen = strlen(file);
-	GET_TOKEN_AREA(t, dptr, filelen + 12);
+	filelen += 1;
+
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int32_t) +
+	    sizeof(u_int16_t) + filelen);
 	if (t == NULL)
 		return (NULL);
 
-	filelen += 1;
 	timems = tm.tv_usec/1000;
 
 	ADD_U_CHAR(dptr, AUT_OTHER_FILE32);
@@ -607,12 +612,12 @@
 		return (NULL);
 	}
 	textlen = strlen(text);
-	GET_TOKEN_AREA(t, dptr, textlen + 4);
+	textlen += 1;
+
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) + textlen);
 	if (t == NULL)
 		return (NULL);
 
-	textlen += 1;
-
 	ADD_U_CHAR(dptr, AUT_TEXT);
 	ADD_U_INT16(dptr, textlen);
 	ADD_STRING(dptr, text, textlen);
@@ -637,12 +642,12 @@
 		return (NULL);
 	}
 	textlen = strlen(text);
-	GET_TOKEN_AREA(t, dptr, textlen + 4);
+	textlen += 1;
+
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) + textlen);
 	if (t == NULL)
 		return (NULL);
 
-	textlen += 1;
-
 	ADD_U_CHAR(dptr, AUT_PATH);
 	ADD_U_INT16(dptr, textlen);
 	ADD_STRING(dptr, text, textlen);
@@ -675,7 +680,7 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 37);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 9 * sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -737,7 +742,7 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 53);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 13 * sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -788,7 +793,7 @@
 	token_t *t;
 	u_char *dptr = NULL;
 
-	GET_TOKEN_AREA(t, dptr, 6);
+	GET_TOKEN_AREA(t, dptr, 2 * sizeof(u_char) + sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -805,7 +810,7 @@
 	token_t *t;
 	u_char *dptr = NULL;
 
-	GET_TOKEN_AREA(t, dptr, 10);
+	GET_TOKEN_AREA(t, dptr, 2 * sizeof(u_char) + sizeof(u_int64_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -833,7 +838,7 @@
 	token_t *t;
 	u_char *dptr = NULL;
 
-	GET_TOKEN_AREA(t, dptr, 5);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -901,7 +906,7 @@
 	if (so == NULL)
 		return (NULL);
 
-	GET_TOKEN_AREA(t, dptr, 107);
+	GET_TOKEN_AREA(t, dptr, 3 * sizeof(u_char) + strlen(so->sun_path) + 1);
 	if (t == NULL)
 		return (NULL);
 
@@ -909,7 +914,7 @@
 	/* BSM token has two bytes for family */
 	ADD_U_CHAR(dptr, 0);
 	ADD_U_CHAR(dptr, so->sun_family);
-	ADD_STRING(dptr, so->sun_path, strlen(so->sun_path));
+	ADD_STRING(dptr, so->sun_path, strlen(so->sun_path) + 1);
 
 	return (t);
 }
@@ -931,7 +936,8 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 9);
+	GET_TOKEN_AREA(t, dptr, 3 * sizeof(u_char) + sizeof(u_int16_t) +
+	    sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -960,7 +966,8 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 21);
+	GET_TOKEN_AREA(t, dptr, 3 * sizeof(u_char) + sizeof(u_int16_t) +
+	    4 * sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -1014,7 +1021,7 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 37);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 9 * sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -1076,7 +1083,7 @@
 		return (NULL);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 53);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 13 * sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -1164,7 +1171,8 @@
 		nextarg = *(args + count);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 5 + totlen);
+	totlen += count * sizeof(char);	/* nul terminations. */
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) + totlen);
 	if (t == NULL)
 		return (NULL);
 
@@ -1209,7 +1217,8 @@
 		nextenv = *(env + count);
 	}
 
-	GET_TOKEN_AREA(t, dptr, 5 + totlen);
+	totlen += sizeof(char) * count;
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) + totlen);
 	if (t == NULL)
 		return (NULL);
 
@@ -1252,7 +1261,8 @@
 		return (NULL);
 #endif
 
-	GET_TOKEN_AREA(t, dptr, 18);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) +
+	    sizeof(u_char) + 2 * sizeof(u_int16_t) + 2 * sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 
@@ -1297,7 +1307,8 @@
 	u_char *dptr = NULL;
 	u_int16_t magic = TRAILER_PAD_MAGIC;
 
-	GET_TOKEN_AREA(t, dptr, 7);
+	GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) +
+	    sizeof(u_int32_t));
 	if (t == NULL)
 		return (NULL);
 


More information about the p4-projects mailing list