Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Dec 2019 22:33:22 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r356031 - head/stand/i386/gptboot
Message-ID:  <201912222233.xBMMXMqu050000@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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?201912222233.xBMMXMqu050000>