x86/efi/bgrt: Don't ignore the BGRT if the 'valid' bit is 0
authorMôshe van der Sterre <me@moshe.nl>
Mon, 1 Feb 2016 22:07:03 +0000 (22:07 +0000)
committerIngo Molnar <mingo@kernel.org>
Wed, 3 Feb 2016 10:41:19 +0000 (11:41 +0100)
Unintuitively, the BGRT graphic is apparently meant to be usable
if the valid bit in not set. The valid bit only conveys
uncertainty about the validity in relation to the screen state.

Windows 10 actually uses the BGRT image for its boot screen even
if not 'valid', for example when the user triggered the boot
menu. Because it is unclear if all firmwares will provide a
usable graphic in this case, we now look at the BMP magic number
as an additional check.

Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Môshe van der Sterre <me@moshe.nl>
Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
Cc: =?UTF-8?q?M=C3=B4she=20van=20der=20Sterre?= <me@moshe.nl>
Link: http://lkml.kernel.org/r/1454364428-494-10-git-send-email-matt@codeblueprint.co.uk
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/platform/efi/efi-bgrt.c

index b0970661870a7efbd823ed35a47519422721e9a4..a2433817c987833f525380d8425bb6e902873bbd 100644 (file)
@@ -57,11 +57,6 @@ void __init efi_bgrt_init(void)
                       bgrt_tab->status);
                return;
        }
-       if (bgrt_tab->status != 1) {
-               pr_debug("Ignoring BGRT: invalid status %u (expected 1)\n",
-                        bgrt_tab->status);
-               return;
-       }
        if (bgrt_tab->image_type != 0) {
                pr_err("Ignoring BGRT: invalid image type %u (expected 0)\n",
                       bgrt_tab->image_type);
@@ -80,6 +75,11 @@ void __init efi_bgrt_init(void)
 
        memcpy(&bmp_header, image, sizeof(bmp_header));
        memunmap(image);
+       if (bmp_header.id != 0x4d42) {
+               pr_err("Ignoring BGRT: Incorrect BMP magic number 0x%x (expected 0x4d42)\n",
+                       bmp_header.id);
+               return;
+       }
        bgrt_image_size = bmp_header.size;
 
        bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL | __GFP_NOWARN);
This page took 0.025043 seconds and 5 git commands to generate.