From: Marc Dionne Date: Thu, 22 Sep 2011 00:31:33 +0000 (-0400) Subject: fs: fix setserverprefs where long is larger than afs_int32 X-Git-Tag: upstream/1.6.1.pre1^2~210 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=dda39417e94e4463dd0fa49dddd918bc3a8765a6;p=packages%2Fo%2Fopenafs.git fs: fix setserverprefs where long is larger than afs_int32 Make the fscanf and scanf format specifiers match the type of the target variable. This prevents trying to store a long int into an afs_int32 variable which may be smaller, and overwriting neighbouring data on the stack. The effect on a 64-bit Linux system was that the high bits of "rank" would overwrite the first 4 bytes of the scanned host name, causing setserverprefs to fail with: : couldn't resolve name. Reviewed-on: http://gerrit.openafs.org/5486 Tested-by: BuildBot Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 649d3a0957eef0c607a63b47f11bd4a0ca8655ca) Change-Id: I5869423a8512e6e5d64162b17a69106355ca3639 Reviewed-on: http://gerrit.openafs.org/5535 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/venus/fs.c b/src/venus/fs.c index a8c17123e..31b2f5621 100644 --- a/src/venus/fs.c +++ b/src/venus/fs.c @@ -3113,7 +3113,7 @@ SetPrefCmd(struct cmd_syndesc *as, void *arock) afs_int32 code; struct cmd_item *ti; char name[80]; - afs_int32 rank; + int rank; struct setspref *ssp; int error = 0; /* -1 means error message printed, * >0 means errno value for unprinted message */ @@ -3140,7 +3140,7 @@ SetPrefCmd(struct cmd_syndesc *as, void *arock) perror(ti->data); error = -1; } else { - while (fscanf(infd, "%79s%ld", name, (long int *)&rank) != EOF) { + while (fscanf(infd, "%79s%d", name, &rank) != EOF) { code = addServer(name, (unsigned short)rank); if (code) error = code; @@ -3150,7 +3150,7 @@ SetPrefCmd(struct cmd_syndesc *as, void *arock) ti = as->parms[3].items; /* -stdin */ if (ti) { - while (scanf("%79s%ld", name, (long int *)&rank) != EOF) { + while (scanf("%79s%d", name, &rank) != EOF) { code = addServer(name, (unsigned short)rank); if (code) error = code;