]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
disk: Generalize MD_MAX_DISKS to GRUB_MDRAID_MAX_DISKS
authorJulian Andres Klode <julian.klode@canonical.com>
Tue, 13 Jun 2023 12:54:48 +0000 (14:54 +0200)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 22 Jun 2023 22:50:38 +0000 (00:50 +0200)
Move the constant from grub-core/osdep/linux/getroot.c to
include/grub/disk.h and then reuse it in place of the
hardcoded 1024 limit in diskfilter.

Fixes: 2a5e3c1f2 (disk/diskfilter: Don't make a RAID array with more than 1024 disks)
Cc: Daniel Axtens <dja@axtens.net>
Cc: Kees Cook <keescook@chromium.org>
Signed-off-by: Julian Andres Klode <julian.klode@canonical.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/disk/diskfilter.c
grub-core/osdep/linux/getroot.c
include/grub/disk.h

index 1c568927b8bac3c0eb9958b12ffe9a2b5ea38e9d..61a311efdb17d45fa79474f68fac48c0007ad589 100644 (file)
@@ -1046,8 +1046,8 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
   struct grub_diskfilter_pv *pv;
   grub_err_t err;
 
-  /* We choose not to support more than 1024 disks. */
-  if (nmemb < 1 || nmemb > 1024)
+  /* We choose not to support more than the specified number of disks. */
+  if (nmemb < 1 || nmemb > GRUB_MDRAID_MAX_DISKS)
     {
       grub_free (uuid);
       return NULL;
index 9cf037ec26d04f94e7dffb6553fcb464e0db8a23..7dd775d2ad98aed754a6f10a3aab3982c5800927 100644 (file)
@@ -44,6 +44,7 @@
 
 #include <grub/mm.h>
 #include <grub/misc.h>
+#include <grub/disk.h>
 #include <grub/emu/misc.h>
 #include <grub/emu/hostdisk.h>
 #include <grub/emu/getroot.h>
@@ -130,15 +131,6 @@ struct mountinfo_entry
   char fstype[ESCAPED_PATH_MAX + 1], device[ESCAPED_PATH_MAX + 1];
 };
 
-/*
- * GET_DISK_INFO nr_disks (total count) does not map to disk.number,
- * which is an internal kernel index. Instead, do what mdadm does
- * and keep scanning until we find enough valid disks. The limit is
- * copied from there, which notes that it is sufficiently high given
- * that the on-disk metadata for v1.x can only support 1920.
- */
-#define MD_MAX_DISKS       4096
-
 static char **
 grub_util_raid_getmembers (const char *name, int bootable)
 {
@@ -176,7 +168,7 @@ grub_util_raid_getmembers (const char *name, int bootable)
   devicelist = xcalloc (info.nr_disks + 1, sizeof (char *));
 
   remaining = info.nr_disks;
-  for (i = 0, j = 0; i < MD_MAX_DISKS && remaining > 0; i++)
+  for (i = 0, j = 0; i < GRUB_MDRAID_MAX_DISKS && remaining > 0; i++)
     {
       disk.number = i;
       ret = ioctl (fd, GET_DISK_INFO, &disk);
index 071b2f7df1a5b2eedba30434feaf992b3b4b0198..a4b5d13f3d8a83e1a97f0f665413cc02f3921175 100644 (file)
@@ -172,6 +172,17 @@ typedef struct grub_disk_memberlist *grub_disk_memberlist_t;
 /* The maximum number of disk caches.  */
 #define GRUB_DISK_CACHE_NUM    1021
 
+/*
+ * The maximum number of disks in an mdraid device.
+ *
+ * GET_DISK_INFO nr_disks (total count) does not map to disk.number,
+ * which is an internal kernel index. Instead, do what mdadm does
+ * and keep scanning until we find enough valid disks. The limit is
+ * copied from there, which notes that it is sufficiently high given
+ * that the on-disk metadata for v1.x can only support 1920.
+ */
+#define GRUB_MDRAID_MAX_DISKS  4096
+
 /* The size of a disk cache in 512B units. Must be at least as big as the
    largest supported sector size, currently 16K.  */
 #define GRUB_DISK_CACHE_BITS   6