summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrstone <rstone@FreeBSD.org>2011-07-17 21:08:16 +0000
committerrstone <rstone@FreeBSD.org>2011-07-17 21:08:16 +0000
commitcecff2d26e805364b921c7eb9189e52e6ea24cb1 (patch)
treec1563296e7eade8c79bf963d28607497d221b28d
parentc55f34f6d6edc7a75ee7ec67521b8d711ac60503 (diff)
downloadFreeBSD-src-cecff2d26e805364b921c7eb9189e52e6ea24cb1.zip
FreeBSD-src-cecff2d26e805364b921c7eb9189e52e6ea24cb1.tar.gz
The MBR uses a 32-bit unsigned integer to store the size of a slice, but
fdisk(1) internally uses a signed int. Should a user attempt to specify a slice containing more than 2^31 - 1 sectors, an error will be reported on systems with sizeof(long) == 4 and the slice size will be silently truncated on systems with sizeof(long) > 4. Instead use an unsigned long to store the slice size in fdisk(1). This allows the user to specify a slice size up to the maximum permitted by the MBR on-disk format and does not have any problems with silent truncation should the use specify an slice size larger than 2^32 on systems with sizeof(long) > 4. Submitted by: Mark Johnston (markjdb AT gmail DOT com) MFC after: 2 weeks
-rw-r--r--sbin/fdisk/fdisk.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sbin/fdisk/fdisk.c b/sbin/fdisk/fdisk.c
index 8314906..eb81e3b 100644
--- a/sbin/fdisk/fdisk.c
+++ b/sbin/fdisk/fdisk.c
@@ -108,9 +108,9 @@ typedef struct cmd {
char cmd;
int n_args;
struct arg {
- char argtype;
- int arg_val;
- char *arg_str;
+ char argtype;
+ unsigned long arg_val;
+ char * arg_str;
} args[MAX_ARGS];
} CMD;
@@ -990,7 +990,7 @@ parse_config_line(char *line, CMD *command)
if (isalpha(*cp))
command->args[command->n_args].argtype = *cp++;
end = NULL;
- command->args[command->n_args].arg_val = strtol(cp, &end, 0);
+ command->args[command->n_args].arg_val = strtoul(cp, &end, 0);
if (cp == end || (!isspace(*end) && *end != '\0')) {
char ch;
end = cp;
OpenPOWER on IntegriCloud