From ce5e263b488f8cb85662031ee08eea448dab2d27 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 16 Mar 2011 14:44:56 -0500 Subject: [PATCH] salvager: Fix volume parsing on 64-bit When an unsigned long is wider than an afs_uint32, comparing the afs_uint32 vid to ULONG_MAX is always going to be false (which the compiler can warn us about). Fix this by storing to an unsigned long, and converting to a volume id after ensuring that the result is not too large. Change-Id: Ifbd724dabd988bc4b1ba6ee8f3dc7fa1a0afb226 Reviewed-on: http://gerrit.openafs.org/4244 Tested-by: BuildBot Reviewed-by: Simon Wilkinson Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- src/vol/salvaged.c | 6 ++++-- src/vol/salvager.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/vol/salvaged.c b/src/vol/salvaged.c index 091636cf3..6883849d6 100644 --- a/src/vol/salvaged.c +++ b/src/vol/salvaged.c @@ -274,12 +274,14 @@ handleit(struct cmd_syndesc *as, void *arock) } if ((ti = as->parms[1].items)) { /* -volumeid */ char *end; + unsigned long vid_l; seenvol = 1; - vid = strtoul(ti->data, &end, 10); - if (vid == ULONG_MAX || *end != '\0') { + vid_l = strtoul(ti->data, &end, 10); + if (vid_l >= MAX_AFS_UINT32 || vid_l == ULONG_MAX || *end != '\0') { printf("Invalid volume id specified; salvage aborted\n"); exit(-1); } + vid = (VolumeId)vid_l; } if (ShowLog) { diff --git a/src/vol/salvager.c b/src/vol/salvager.c index 88d0ec140..7da137386 100644 --- a/src/vol/salvager.c +++ b/src/vol/salvager.c @@ -181,17 +181,19 @@ handleit(struct cmd_syndesc *as, void *arock) } if ((ti = as->parms[1].items)) { /* -volumeid */ char *end; + unsigned long vid_l; if (!seenpart) { printf ("You must also specify '-partition' option with the '-volumeid' option\n"); exit(-1); } seenvol = 1; - vid = strtoul(ti->data, &end, 10); - if (vid == ULONG_MAX || *end != '\0') { + vid_l = strtoul(ti->data, &end, 10); + if (vid_l >= MAX_AFS_UINT32 || vid_l == ULONG_MAX || *end != '\0') { Log("salvage: invalid volume id specified; salvage aborted\n"); Exit(1); } + vid = (VolumeId)vid_l; } if (as->parms[2].items) /* -debug */ debug = 1; -- 2.39.5