Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 23 Dec 2019 10:11:58 +0200
From:      Toomas Soome <tsoome@me.com>
To:        Ian Lepore <ian@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r356031 - head/stand/i386/gptboot
Message-ID:  <DD785573-029D-4FD6-AA5B-B33FEC2F8DF1@me.com>
In-Reply-To: <201912222233.xBMMXMqu050000@repo.freebsd.org>
References:  <201912222233.xBMMXMqu050000@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

The only limit set by specification is:
A minimum of 16,384 bytes of space must be reserved for the GPT Partition Entry Array.

From this size and array entry size we do get 128, but specification does not limit the max number.

rgds,
toomas

> On 23. Dec 2019, at 00:33, Ian Lepore <ian@FreeBSD.org> wrote:
> 
> Author: ian
> Date: Sun Dec 22 22:33:22 2019
> New Revision: 356031
> URL: https://svnweb.freebsd.org/changeset/base/356031
> 
> Log:
>  In gptboot, don't assume a partition number is a single digit, 1-9.  GPT
>  partitions can have 128 partitions, so parse contiguous digits and then
>  validate that the number is between 1-128 inclusive.
> 
>  I'm not sure 128 is a hard limit in the GPT standard, but it's the common
>  number in use, and it's a better upper limit than 9.
> 
> Modified:
>  head/stand/i386/gptboot/gptboot.c
> 
> Modified: head/stand/i386/gptboot/gptboot.c
> ==============================================================================
> --- head/stand/i386/gptboot/gptboot.c	Sun Dec 22 22:10:20 2019	(r356030)
> +++ head/stand/i386/gptboot/gptboot.c	Sun Dec 22 22:33:22 2019	(r356031)
> @@ -574,10 +574,12 @@ parse_cmds(char *cmdstr, int *dskupdated)
> 				if (arg[1] != 'p' || gdsk.dsk.unit > 9)
> 					return (-1);
> 				arg += 2;
> -				gdsk.dsk.part = *arg - '0';
> -				if (gdsk.dsk.part < 1 || gdsk.dsk.part > 9)
> +				j = 0;
> +				while (*arg >= '0' && *arg <= '9')
> +					j = j * 10 + *arg++ - '0';
> +				gdsk.dsk.part = j;
> +				if (gdsk.dsk.part < 1 || gdsk.dsk.part > 128)
> 					return (-1);
> -				arg++;
> 				if (arg[0] != ')')
> 					return (-1);
> 				arg++;




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DD785573-029D-4FD6-AA5B-B33FEC2F8DF1>