]> git.ipfire.org Git - thirdparty/grub.git/commit
osdep/linux: Fix md array device enumeration
authorKees Cook <kees@ubuntu.com>
Thu, 7 Oct 2021 23:33:16 +0000 (16:33 -0700)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 14 Oct 2021 16:14:39 +0000 (18:14 +0200)
commitc39f27cd678d61e8e84c1386695a33575c9ded44
tree41b9fa90fbb76257c3218e762c0bb87c5b9256b1
parent9bcf3cebbdf3dceb99d41cfc2dc0814c18f3dd15
osdep/linux: Fix md array device enumeration

GET_ARRAY_INFO's info.nr_disks does not map to GET_DISK_INFO's
disk.number, which is an internal kernel index. If an array has had drives
added, removed, etc., there may be gaps in GET_DISK_INFO's results. But
since the consumer of devicelist cannot tolerate gaps (it expects to walk
a NULL-terminated list of device name strings), the devicelist index (j)
must be tracked separately from the disk.number index (i).

As part of this, since GRUB wants to only examine active (i.e. present
and non-failed) disks, the count of remaining disks (remaining) must be
tracked separately from the devicelist index (j).

Additionally, drop a line with empty spaces only.

Fixes: 49de079bbe1c (... (grub_util_raid_getmembers): Handle "removed" disks)
Fixes: 2b00217369ac (... Added support for RAID and LVM)
Fixes: https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1912043
Fixes: https://savannah.gnu.org/bugs/index.php?59887
Signed-off-by: Kees Cook <kees@ubuntu.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/osdep/linux/getroot.c