Hi,

The patch below fixes an off-by-one in /arch/amd64/stand/libsa/cmd_i386.c.

The affected code path is handling the machine boot command in the bootloader. 
Currently, trying to boot from MBR partition 'a', with a command such as 
machine boot hd0a, will in fact boot from whichever partition is flagged as 
active, rather than forcing a boot from partition 'a'.

The bug was introduced in revision 1.20 of the original i386 architecture file 
over 20 years ago on 19980224.

untrusted comment: verify with signify key for exoticsilicon.com
RWRn5d3Yx35u0w51USyxAkjCzjLo99UNE67gXzvuaTGbD9cMlTKdDTOAOe7JA6LV/VLWqmomwo7D9m399vKnra2KyrUn/EYcUgo=
--- arch/amd64/stand/libsa/cmd_i386.c.dist      Fri May 10 18:20:43 2019
+++ arch/amd64/stand/libsa/cmd_i386.c   Sun Aug 15 23:44:45 2021
@@ -107,7 +107,7 @@
        dev += (cmd.argv[1][2] - '0');
        part = (cmd.argv[1][3] - 'a');
 
-       if (part > 0)
+       if (part >= 0)
                printf("[%x,%d]\n", dev, part);
        else
                printf("[%x]\n", dev);
@@ -119,7 +119,7 @@
                goto bad;
 
        /* Frob boot flag in buffer from HD */
-       if ((dev & 0x80) && (part > 0)){
+       if ((dev & 0x80) && (part >= 0)){
                int i, j;
 
                for (i = 0, j = DOSPARTOFF; i < 4; i++, j += 16)
--- arch/i386/stand/libsa/cmd_i386.c.dist       Fri Jun 10 15:36:06 2016
+++ arch/i386/stand/libsa/cmd_i386.c    Sun Aug 15 23:44:23 2021
@@ -119,7 +119,7 @@
        dev += (cmd.argv[1][2] - '0');
        part = (cmd.argv[1][3] - 'a');
 
-       if (part > 0)
+       if (part >= 0)
                printf("[%x,%d]\n", dev, part);
        else
                printf("[%x]\n", dev);
@@ -131,7 +131,7 @@
                goto bad;
 
        /* Frob boot flag in buffer from HD */
-       if ((dev & 0x80) && (part > 0)){
+       if ((dev & 0x80) && (part >= 0)){
                int i, j;
 
                for (i = 0, j = DOSPARTOFF; i < 4; i++, j += 16)

Reply via email to