svn commit: r356031 - head/stand/i386/gptboot

Toomas Soome tsoome at me.com
Mon Dec 23 08:12:05 UTC 2019


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 at 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++;



More information about the svn-src-head mailing list