Don't attempt to use EFI runtime services on UEFI versions before 2.1.
authorkettenis <kettenis@openbsd.org>
Thu, 20 Oct 2022 18:43:35 +0000 (18:43 +0000)
committerkettenis <kettenis@openbsd.org>
Thu, 20 Oct 2022 18:43:35 +0000 (18:43 +0000)
The Dell Precision T1600 has a UEFI 2.0 implementation where calling
GetTime() accesses memory that isn't covered by a runtime mapping.
And frankly UEFI 2.0 is so ancient that we don't really want to use it
anyway.

This also adds the check to the arm64 version even though UEFI versions
before 2.4 don't have arm64 support.  But for now I want to keep amd64
and arm64 code as similar as possible.

ok kn@

sys/arch/amd64/amd64/efi_machdep.c
sys/arch/arm64/dev/efi_machdep.c

index f4e9835..cb00554 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: efi_machdep.c,v 1.1 2022/10/16 15:03:39 kettenis Exp $        */
+/*     $OpenBSD: efi_machdep.c,v 1.2 2022/10/20 18:43:35 kettenis Exp $        */
 
 /*
  * Copyright (c) 2022 Mark Kettenis <kettenis@openbsd.org>
@@ -112,6 +112,10 @@ efi_attach(struct device *parent, struct device *self, void *aux)
                printf(".%d", minor % 10);
        printf("\n");
 
+       /* Early implementations can be buggy. */
+       if (major < 2 || (major == 2 && minor < 10))
+               return;
+
        if ((bios_efiinfo->flags & BEI_64BIT) == 0)
                return;
 
index 2873105..1144af5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: efi_machdep.c,v 1.2 2022/10/12 13:39:50 kettenis Exp $        */
+/*     $OpenBSD: efi_machdep.c,v 1.3 2022/10/20 18:43:35 kettenis Exp $        */
 
 /*
  * Copyright (c) 2017 Mark Kettenis <kettenis@openbsd.org>
@@ -118,6 +118,10 @@ efi_attach(struct device *parent, struct device *self, void *aux)
                printf(".%d", minor % 10);
        printf("\n");
 
+       /* Early implementations can be buggy. */
+       if (major < 2 || (major == 2 && minor < 10))
+               return;
+
        efi_map_runtime(sc);
 
        /*