This is 'belt and braces' with commit 12e20a6a695f ("disk/diskfilter: Check calloc() result for NULL"): we end up trying to use too much memory in situations like corrupted Linux software raid setups purporting to use a huge number of disks. Simply refuse to permit such configurations.
1024 is a bit arbitrary, yes, and I feel a bit like I'm tempting fate here, but I think 1024 disks in an array (that grub has to read to boot!) should be enough for anyone. Signed-off-by: Daniel Axtens <d...@axtens.net> --- v2: add a minimum of 1 disk as nmemb is a signed integer. Tested with `./grub-fs-tester` using mdraid12_raid1 and mdraid12_raid5. Hopefully that means things work; I don't have software raid set up locally. --- grub-core/disk/diskfilter.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c index 4ac50320ef4e..24de8e6c6521 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -1046,6 +1046,13 @@ 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) + { + grub_free (uuid); + return NULL; + } + switch (level) { case 1: -- 2.25.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel