]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
luks2: Do not handle disks of size GRUB_DISK_SIZE_UNKNOWN for now
authorGlenn Washburn <development@efficientek.com>
Tue, 15 Dec 2020 23:31:07 +0000 (17:31 -0600)
committerDaniel Kiper <daniel.kiper@oracle.com>
Fri, 18 Dec 2020 14:19:40 +0000 (15:19 +0100)
Check to make sure that source disk has a known size. If not, print
a message and return error. There are 4 cases where GRUB_DISK_SIZE_UNKNOWN
is set (biosdisk, obdisk, ofdisk, and uboot), and in all those cases
processing continues. So this is probably a bit conservative. However,
3 of the cases seem pathological, and the other, biosdisk, happens when
booting from a CD-ROM. Since I doubt booting from a LUKS2 volume on
a CD-ROM is a big use case, we'll error until someone complains.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/disk/luks2.c

index 8c1156dd0451623132160be0d8c78ee53a0d0dc0..d30a82a09f86daa87825d69770346703724bd393 100644 (file)
@@ -600,6 +600,15 @@ luks2_recover_key (grub_disk_t source,
       goto err;
     }
 
+  if (grub_disk_native_sectors (source) == GRUB_DISK_SIZE_UNKNOWN)
+    {
+      /* FIXME: Allow use of source disk, and maybe cause errors in read. */
+      grub_dprintf ("luks2", "Source disk %s has an unknown size, "
+                            "conservatively returning error\n", source->name);
+      ret = grub_error (GRUB_ERR_BUG, "Unknown size of luks2 source device");
+      goto err;
+    }
+
   /* Try all keyslot */
   for (json_idx = 0; json_idx < size; json_idx++)
     {