[Libguestfs] [PATCH 27/67] Fix parsing of boot flag in do_part_get_bootable()

Richard W.M. Jones rjones at redhat.com
Sat Aug 24 11:04:27 UTC 2013


From: Paul Mackerras <paulus at samba.org>

The code in do_part_get_bootable() assumes that if a partition has the
bootable flag set, then that is the only flag.  It compares the entire
flags field with the string "boot".  However, the boot flag isn't
always the only flag.  For instance, POWER systems typically have a
bootable partition of type 0x41 (PPC PReP boot), which parted -m
displays as:

# parted -m -- f18.img unit b print
BYT;
/root/f18.img:16106127360B:file:512:512:msdos::;
1:1048576B:5242879B:4194304B:::boot, prep;

That is, the flags field contains "boot, prep", and thus libguestfs
fails to see that this partition is bootable.  Ultimately this causes
virt-resize to fail to set the bootable flag on the boot partition of
the destination image, resulting in an image that won't boot.

This patch fixes the problem by searching for the string "boot" within
the flags field, instead of comparing the whole flags field.

(cherry picked from commit 7c535c501b1ce131ae98dd948b22fc260d659d1b)
---
 daemon/parted.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/daemon/parted.c b/daemon/parted.c
index 7b1afb1..2ada40f 100644
--- a/daemon/parted.c
+++ b/daemon/parted.c
@@ -628,7 +628,7 @@ do_part_get_bootable (const char *device, int partnum)
     if (boot == NULL)
       return -1;
 
-    return STREQ (boot, "boot");
+    return strstr (boot, "boot") != NULL;
   }
   else {
     /* Old-style: First look for the line matching "^Number". */
-- 
1.8.3.1




More information about the Libguestfs mailing list