From 86ab2cf6048cfbf17dd449d8c05c4a9b06c418d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renaud=20M=C3=A9trich?= Date: Fri, 21 Jun 2024 08:02:12 +0200 Subject: [PATCH] grub-probe: detect DDF container similar to IMSM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DDF and IMSM are very similar in handling, especially these should not be considered as RAID abstraction. This fixes the requirement of having a device map when probing DDF containers. Fixes RHEL-44336. Signed-off-by: Renaud Métrich --- grub-core/osdep/linux/getroot.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c index 7dd775d2ad..0c6c129456 100644 --- a/grub-core/osdep/linux/getroot.c +++ b/grub-core/osdep/linux/getroot.c @@ -119,7 +119,7 @@ struct btrfs_ioctl_search_args { struct btrfs_ioctl_fs_info_args) static int -grub_util_is_imsm (const char *os_dev); +grub_util_is_imsm_or_ddf (const char *os_dev); #define ESCAPED_PATH_MAX (4 * PATH_MAX) @@ -635,10 +635,10 @@ get_mdadm_uuid (const char *os_dev) } static int -grub_util_is_imsm (const char *os_dev) +grub_util_is_imsm_or_ddf (const char *os_dev) { int retry; - int is_imsm = 0; + int is_imsm_or_ddf = 0; int container_seen = 0; const char *dev = os_dev; @@ -699,10 +699,17 @@ grub_util_is_imsm (const char *os_dev) if (strncmp (buf, "MD_METADATA=imsm", sizeof ("MD_METADATA=imsm") - 1) == 0) { - is_imsm = 1; + is_imsm_or_ddf = 1; grub_util_info ("%s is imsm", dev); break; } + if (strncmp (buf, "MD_METADATA=ddf", + sizeof ("MD_METADATA=ddf") - 1) == 0) + { + is_imsm_or_ddf = 1; + grub_util_info ("%s is ddf", dev); + break; + } } free (buf); @@ -713,7 +720,7 @@ grub_util_is_imsm (const char *os_dev) if (dev != os_dev) free ((void *) dev); - return is_imsm; + return is_imsm_or_ddf; } char * @@ -1078,7 +1085,7 @@ grub_util_get_dev_abstraction_os (const char *os_dev) /* Check for RAID. */ if (!strncmp (os_dev, "/dev/md", 7) && ! grub_util_device_is_mapped (os_dev) - && !grub_util_is_imsm (os_dev)) + && !grub_util_is_imsm_or_ddf (os_dev)) return GRUB_DEV_ABSTRACTION_RAID; return GRUB_DEV_ABSTRACTION_NONE; }