lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <4B02B654.9080304@internode.on.net>
Date:	Wed, 18 Nov 2009 01:12:28 +1030
From:	indexer <indexer@...ernode.on.net>
To:	linux-kernel@...r.kernel.org
Subject: Regression in efi.c 2.6.32-rc7

I would like to report a possible regression in efi.c with kernels
2.6.31 , 2.6.32-rc5 and 2.6.32.rc7.

Attempting to boot x86_64 with elilo succeeds using 2.6.30 . Using the
same config cannot boot with any of the 3 afore mentioned kernels. Elilo
freezes at bootloader as system attempts to initiate. Cannot attach a
serial console for debug, and no errors appear on screen. No version of
refit, elilo, efi firmware changes, only the kernel in question. This
results in an unbootable system using efi.

I have already followed the patch described here,
http://bugzilla.kernel.org/show_bug.cgi?id=14466 , it does not change
the situation on 2.6.31 or 2.6.32-rc5, and no need to patch 2.6.32-rc7
as it was merged already.

The below diff shows the differences in efi.c between 2.6.30 and
2.6.32-rc7. Please also find attached my .config for 2.6.32.rc7

--- linux-2.6.30-gentoo-r5/arch/x86/kernel/efi.c    2009-06-10
12:35:27.000000000 +0930
+++ linux-2.6.32-rc7/arch/x86/kernel/efi.c    2009-11-18
01:10:09.000000000 +1030
@@ -42,6 +42,7 @@
 #include <asm/time.h>
 #include <asm/cacheflush.h>
 #include <asm/tlbflush.h>
+#include <asm/x86_init.h>
 
 #define EFI_DEBUG    1
 #define PFX         "EFI: "
@@ -240,10 +241,35 @@
         unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
         int e820_type;
 
-        if (md->attribute & EFI_MEMORY_WB)
-            e820_type = E820_RAM;
-        else
+        switch (md->type) {
+        case EFI_LOADER_CODE:
+        case EFI_LOADER_DATA:
+        case EFI_BOOT_SERVICES_CODE:
+        case EFI_BOOT_SERVICES_DATA:
+        case EFI_CONVENTIONAL_MEMORY:
+            if (md->attribute & EFI_MEMORY_WB)
+                e820_type = E820_RAM;
+            else
+                e820_type = E820_RESERVED;
+            break;
+        case EFI_ACPI_RECLAIM_MEMORY:
+            e820_type = E820_ACPI;
+            break;
+        case EFI_ACPI_MEMORY_NVS:
+            e820_type = E820_NVS;
+            break;
+        case EFI_UNUSABLE_MEMORY:
+            e820_type = E820_UNUSABLE;
+            break;
+        default:
+            /*
+             * EFI_RESERVED_TYPE EFI_RUNTIME_SERVICES_CODE
+             * EFI_RUNTIME_SERVICES_DATA EFI_MEMORY_MAPPED_IO
+             * EFI_MEMORY_MAPPED_IO_PORT_SPACE EFI_PAL_CODE
+             */
             e820_type = E820_RESERVED;
+            break;
+        }
         e820_add_region(start, size, e820_type);
     }
     sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
@@ -329,7 +355,7 @@
      */
     c16 = tmp = early_ioremap(efi.systab->fw_vendor, 2);
     if (c16) {
-        for (i = 0; i < sizeof(vendor) && *c16; ++i)
+        for (i = 0; i < sizeof(vendor) - 1 && *c16; ++i)
             vendor[i] = *c16++;
         vendor[i] = '\0';
     } else
@@ -428,6 +454,11 @@
     if (add_efi_memmap)
         do_add_efi_memmap();
 
+#ifdef CONFIG_X86_32
+    x86_platform.get_wallclock = efi_get_time;
+    x86_platform.set_wallclock = efi_set_rtc_mmss;
+#endif
+
     /* Setup for EFI runtime service */
     reboot_type = BOOT_EFI;
 
@@ -487,7 +518,7 @@
             && end_pfn <= max_pfn_mapped))
             va = __va(md->phys_addr);
         else
-            va = efi_ioremap(md->phys_addr, size);
+            va = efi_ioremap(md->phys_addr, size, md->type);
 
         md->virt_addr = (u64) (unsigned long) va;
 




View attachment ".config" of type "text/plain" (71584 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ