Fix segmentation fault in vsu_GetVolumeID

When determining the volume type of a volume, vsu_GetVolumeID() checks
to see if the volume name ends in '.backup' or '.readonly' by backing
up the appropriate number of characters from the end of the name. It
does not, however, check to see if it skips past the beginning of the
volume name. This can result in a segmentation fault (which it has for
me on many occasions during a vos release) depending on where memory
is allocated or how/if memory is protected.

This patch corrects this behaviour by checking the volume name string
length prior to doing the string comparison.

Change-Id: Ia27fcac76b86ae2707663caa6bff365a4e8dd0da
Reviewed-on: http://gerrit.openafs.org/1269
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
This commit is contained in:
Antoine Verheijen 2010-02-08 16:01:46 -07:00 committed by Derrick Brashear
parent 267c22e771
commit 4221d7acc8

View File

@ -449,9 +449,9 @@ vsu_GetVolumeID(char *astring, struct ubik_client *acstruct, afs_int32 *errp)
vsu_ExtractName(volname, astring);
vcode = VLDB_GetEntryByName(volname, &entry);
if (!vcode) {
if (!strcmp(&astring[total - 9], ".readonly"))
if ((total >= 9) && (!strcmp(&astring[total - 9], ".readonly")))
return entry.volumeId[ROVOL];
else if ((!strcmp(&astring[total - 7], ".backup")))
else if ((total >= 7) && (!strcmp(&astring[total - 7], ".backup")))
return entry.volumeId[BACKVOL];
else
return (entry.volumeId[RWVOL]);