Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 May 2011 11:46:02 -0400
From:      Mark Johnston <markjdb@gmail.com>
To:        freebsd-fs@freebsd.org
Subject:   fdisk(1) uses a signed int for slice sizes
Message-ID:  <20110524154602.GA57782@oddish.mark-home>

next in thread | raw e-mail | index | archive | help
Hello all,

fdisk(1) uses a signed int to store slice sizes when reading in a config
file. On platforms with sizeof(int) == 4, this prevents users from
specifying a size of more than 2^{31}-1 sectors even though the
corresponding MBR field is a 32-bit unsigned number.

I have a little patch which fixes this; I was going to ask rstone@ to
commit it, but I'd like to know if there are any objections/comments first.

Thanks,
-Mark

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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110524154602.GA57782>