103 lines
3.8 KiB
Diff
103 lines
3.8 KiB
Diff
From b2c72f4641b1992759f630abf8c22e480933b6c5 Mon Sep 17 00:00:00 2001
|
|
From: Julian Andres Klode <julian.klode@canonical.com>
|
|
Date: Tue, 13 Jun 2023 14:54:48 +0200
|
|
Subject: disk: Generalize MD_MAX_DISKS to GRUB_MDRAID_MAX_DISKS
|
|
|
|
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)
|
|
|
|
Reference:https://git.savannah.gnu.org/cgit/grub.git/commit/?id=b2c72f4641b1992759f630abf8c22e480933b6c5
|
|
Conflict:NA
|
|
|
|
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 | 4 ++--
|
|
grub-core/osdep/linux/getroot.c | 12 ++----------
|
|
include/grub/disk.h | 11 +++++++++++
|
|
3 files changed, 15 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c
|
|
index 1c56892..61a311e 100644
|
|
--- a/grub-core/disk/diskfilter.c
|
|
+++ b/grub-core/disk/diskfilter.c
|
|
@@ -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;
|
|
diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c
|
|
index 9cf037e..7dd775d 100644
|
|
--- a/grub-core/osdep/linux/getroot.c
|
|
+++ b/grub-core/osdep/linux/getroot.c
|
|
@@ -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);
|
|
diff --git a/include/grub/disk.h b/include/grub/disk.h
|
|
index 071b2f7..a4b5d13 100644
|
|
--- a/include/grub/disk.h
|
|
+++ b/include/grub/disk.h
|
|
@@ -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
|
|
--
|
|
cgit v1.1
|
|
|