[kernel] r19840 - in dists/sid/linux/debian: . patches patches/bugfix/x86

Ben Hutchings benh at alioth.debian.org
Sat Feb 23 05:54:20 UTC 2013


Author: benh
Date: Sat Feb 23 05:54:19 2013
New Revision: 19840

Log:
[x86] efi: Make "noefi" really disable EFI runtime serivces

Added:
   dists/sid/linux/debian/patches/bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch
Modified:
   dists/sid/linux/debian/changelog
   dists/sid/linux/debian/patches/series

Modified: dists/sid/linux/debian/changelog
==============================================================================
--- dists/sid/linux/debian/changelog	Sat Feb 23 04:50:30 2013	(r19839)
+++ dists/sid/linux/debian/changelog	Sat Feb 23 05:54:19 2013	(r19840)
@@ -174,6 +174,7 @@
     - possible bugfix, au_lkup_by_ino() returns ESTALE
   * [x86] efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot
     parameter
+  * [x86] efi: Make "noefi" really disable EFI runtime serivces
   * drm, agp: Update to 3.4.32
     - drm/radeon: add WAIT_UNTIL to the non-VM safe regs list for cayman/TN
     - drm/radeon: prevent crash in the ring space allocation

Added: dists/sid/linux/debian/patches/bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch	Sat Feb 23 05:54:19 2013	(r19840)
@@ -0,0 +1,105 @@
+From: Matt Fleming <matt.fleming at intel.com>
+Date: Wed, 20 Feb 2013 20:36:12 +0000
+Subject: x86, efi: Make "noefi" really disable EFI runtime serivces
+
+commit fb834c7acc5e140cf4f9e86da93a66de8c0514da upstream.
+
+commit 1de63d60cd5b ("efi: Clear EFI_RUNTIME_SERVICES rather than
+EFI_BOOT by "noefi" boot parameter") attempted to make "noefi" true to
+its documentation and disable EFI runtime services to prevent the
+bricking bug described in commit e0094244e41c ("samsung-laptop:
+Disable on EFI hardware"). However, it's not possible to clear
+EFI_RUNTIME_SERVICES from an early param function because
+EFI_RUNTIME_SERVICES is set in efi_init() *after* parse_early_param().
+
+This resulted in "noefi" effectively becoming a no-op and no longer
+providing users with a way to disable EFI, which is bad for those
+users that have buggy machines.
+
+Reported-by: Walt Nelson Jr <walt0924 at gmail.com>
+Cc: Satoru Takeuchi <takeuchi_satoru at jp.fujitsu.com>
+Signed-off-by: Matt Fleming <matt.fleming at intel.com>
+Link: http://lkml.kernel.org/r/1361392572-25657-1-git-send-email-matt@console-pimps.org
+Signed-off-by: H. Peter Anvin <hpa at linux.intel.com>
+[bwh: Backported to 3.2: efi_runtime_init() is not a separate function,
+ so put a whole set of statements in an if (!disable_runtime) block]
+---
+--- a/arch/x86/platform/efi/efi.c
++++ b/arch/x86/platform/efi/efi.c
+@@ -83,9 +83,10 @@ int efi_enabled(int facility)
+ }
+ EXPORT_SYMBOL(efi_enabled);
+ 
++static bool disable_runtime = false;
+ static int __init setup_noefi(char *arg)
+ {
+-	clear_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
++	disable_runtime = true;
+ 	return 0;
+ }
+ early_param("noefi", setup_noefi);
+@@ -549,35 +550,37 @@ void __init efi_init(void)
+ 
+ 	set_bit(EFI_CONFIG_TABLES, &x86_efi_facility);
+ 
+-	/*
+-	 * Check out the runtime services table. We need to map
+-	 * the runtime services table so that we can grab the physical
+-	 * address of several of the EFI runtime functions, needed to
+-	 * set the firmware into virtual mode.
+-	 */
+-	runtime = early_ioremap((unsigned long)efi.systab->runtime,
+-				sizeof(efi_runtime_services_t));
+-	if (runtime != NULL) {
+-		/*
+-		 * We will only need *early* access to the following
+-		 * two EFI runtime services before set_virtual_address_map
+-		 * is invoked.
+-		 */
+-		efi_phys.get_time = (efi_get_time_t *)runtime->get_time;
+-		efi_phys.set_virtual_address_map =
+-			(efi_set_virtual_address_map_t *)
+-			runtime->set_virtual_address_map;
++	if (!disable_runtime) {
+ 		/*
+-		 * Make efi_get_time can be called before entering
+-		 * virtual mode.
++		 * Check out the runtime services table. We need to map
++		 * the runtime services table so that we can grab the physical
++		 * address of several of the EFI runtime functions, needed to
++		 * set the firmware into virtual mode.
+ 		 */
+-		efi.get_time = phys_efi_get_time;
+-
+-		set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
+-	} else
+-		printk(KERN_ERR "Could not map the EFI runtime service "
+-		       "table!\n");
+-	early_iounmap(runtime, sizeof(efi_runtime_services_t));
++		runtime = early_ioremap((unsigned long)efi.systab->runtime,
++					sizeof(efi_runtime_services_t));
++		if (runtime != NULL) {
++			/*
++			 * We will only need *early* access to the following
++			 * two EFI runtime services before set_virtual_address_map
++			 * is invoked.
++			 */
++			efi_phys.get_time = (efi_get_time_t *)runtime->get_time;
++			efi_phys.set_virtual_address_map =
++				(efi_set_virtual_address_map_t *)
++				runtime->set_virtual_address_map;
++			/*
++			 * Make efi_get_time can be called before entering
++			 * virtual mode.
++			 */
++			efi.get_time = phys_efi_get_time;
++			
++			set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
++		} else
++			printk(KERN_ERR "Could not map the EFI runtime service "
++			       "table!\n");
++		early_iounmap(runtime, sizeof(efi_runtime_services_t));
++	}
+ 
+ 	/* Map the EFI memory map */
+ 	memmap.map = early_ioremap((unsigned long)memmap.phys_map,

Modified: dists/sid/linux/debian/patches/series
==============================================================================
--- dists/sid/linux/debian/patches/series	Sat Feb 23 04:50:30 2013	(r19839)
+++ dists/sid/linux/debian/patches/series	Sat Feb 23 05:54:19 2013	(r19840)
@@ -625,3 +625,4 @@
 features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch
 bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch
 bugfix/x86/efi-Clear-EFI_RUNTIME_SERVICES-rather-than-EFI_BOOT-.patch
+bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch



More information about the Kernel-svn-changes mailing list