3.7.9-stable review
Subsystems (12)
Greg Kroah-Hartman
maintainercover 3.7.9-stable review
This is the start of the stable review cycle for the 3.7.9 release. There are 10 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Feb 17 22:54:03 UTC 2013. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.7.9-rc1.gz
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 3.7.9-rc1
Satoru Takeuchi <[email protected]>
efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot parameter
Rafael J. Wysocki <[email protected]>
PCI/PM: Clean up PME state when removing a device
Jan Beulich <[email protected]>
x86/xen: don't assume %ds is usable in xen_iret for 32-bit PVOPS.
Mel Gorman <[email protected]>
x86/mm: Check if PUD is large when validating a kernel address
Stoney Wang <[email protected]>
x86/apic: Work around boot failure on HP ProLiant DL980 G7 Server systems
Kees Cook <[email protected]>
x86: Do not leak kernel page mapping locations
Heiko Carstens <[email protected]>
s390/timer: avoid overflow when programming clock comparator
Gerald Schaefer <[email protected]>
mm: don't overwrite mm->def_flags in do_mlockall()
Linus Walleij <[email protected]>
drivers/rtc/rtc-pl031.c: restore ST variant functionality
Greg Kroah-Hartman <[email protected]>
Revert: xfs: fix _xfs_buf_find oops on blocks beyond the filesystem end
-------------
Diffstat:
Makefile | 4 ++-- arch/s390/kernel/time.c | 3 +++ arch/x86/include/asm/pgtable.h | 5 +++++ arch/x86/kernel/apic/x2apic_phys.c | 21 +++++++++++---------- arch/x86/mm/fault.c | 8 +++++--- arch/x86/mm/init_64.c | 3 +++ arch/x86/platform/efi/efi.c | 2 +- arch/x86/xen/xen-asm_32.S | 14 +++++++------- drivers/pci/remove.c | 2 ++ drivers/rtc/rtc-pl031.c | 4 +++- fs/xfs/xfs_buf.c | 18 ------------------ mm/mlock.c | 6 +++--- 12 files changed, 45 insertions(+), 45 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/10 Revert: xfs: fix _xfs_buf_find oops on blocks beyond the filesystem end
3.7-stable review patch. If anyone has any objections, please let me know.
------------------
This reverts commit a56040731e5b00081c6d6c26b99e6e257a5d63d7 which was commit eb178619f930fa2ba2348de332a1ff1c66a31424 upstream.
It has been reported to cause problems:
http://bugzilla.redhat.com/show_bug.cgi?id=909602
--- fs/xfs/xfs_buf.c | 18 ------------------ 1 file changed, 18 deletions(-)
fs/xfs/xfs_buf.c +0 -18
@@ -487,7 +487,6 @@ _xfs_buf_find(struct rb_node *parent;xfs_buf_t *bp;xfs_daddr_t blkno = map[0 ].bm_bn; -xfs_daddr_t eofs;int numblks =0 ;int i;
@@ -499,23 +498,6 @@ _xfs_buf_find(ASSERT (!(numbytes < (1 << btp->bt_sshift)));ASSERT (!(BBTOB (blkno) & (xfs_off_t )btp->bt_smask)); -/* -* Corrupted block numbers can get through to here, unfortunately, so we -* have to check that the buffer falls within the filesystem bounds. -*/ - eofs =XFS_FSB_TO_BB (btp->bt_mount, btp->bt_mount->m_sb.sb_dblocks); -if (blkno >= eofs) { -/* -* XXX (dgc): we should really be returning EFSCORRUPTED here, -* but none of the higher level infrastructure supports -* returning a specific error on buffer lookup failures. -*/ -xfs_alert (btp->bt_mount, -"%s: Block out of range: block 0x%llx, EOFS 0x%llx " , - __func__, blkno, eofs); -return NULL ; - } -/* get tree root */ pag =xfs_perag_get (btp->bt_mount,xfs_daddr_to_agno (btp->bt_mount, blkno));
Re: [ 01/10] Revert: xfs: fix _xfs_buf_find oops on blocks beyond the filesystem end
Quoted 8 lines · Greg Kroah-Hartman
3.7-stable review patch. If anyone has any objections, please let me know.
------------------
This reverts commit
a56040731e5b00081c6d6c26b99e6e257a5d63d7which was commiteb178619f930fa2ba2348de332a1ff1c66a31424upstream.It has been reported to cause problems:
Quoted 8 lines
http://bugzilla.redhat.com/show_bug.cgi?id=909602Acked-by Ben Myers <[email protected]>Cc Dave Chinner <[email protected]>Cc Brian Foster <[email protected]>Cc CAI Qian <[email protected]>Cc Paolo Bonzini <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>
Signature · 2 lines
Dave Chinner [email protected]
Greg Kroah-Hartman
maintainerPATCH 2/10 drivers/rtc/rtc-pl031.c: restore ST variant functionality
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Walleij <[email protected]>
commit 3399cfb5df9594495b876d1843a7165f77366b2b upstream.
Commit e7e034e18a0a ("drivers/rtc/rtc-pl031.c: fix the missing operation on enable") accidentally broke the ST variants of PL031.
The bit that is being poked as "clockwatch" enable bit for the ST variants does the work of bit 0 on this variant. Bit 0 is used for a clock divider on the ST variants, and setting it to 1 will affect timekeeping in a very bad way.
--- drivers/rtc/rtc-pl031.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/rtc/rtc-pl031.c +3 -1
@@ -350,7 +350,9 @@ static int pl031_probe(struct amba_devic/* Enable the clockwatch on ST Variants */ if (vendor->clockwatch) data |=RTC_CR_CWEN ; -writel (data |RTC_CR_EN , ldata->base +RTC_CR ); +else + data |=RTC_CR_EN ; +writel (data, ldata->base +RTC_CR );/* * On ST PL031 variants, the RTC reset value does not provide correct
Greg Kroah-Hartman
maintainerPATCH 3/10 mm: dont overwrite mm->def_flags in do_mlockall()
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gerald Schaefer <[email protected]>
commit 9977f0f164d46613288e0b5778eae500dfe06f31 upstream.
With commit 8e72033f2a48 ("thp: make MADV_HUGEPAGE check for mm->def_flags") the VM_NOHUGEPAGE flag may be set on s390 in mm->def_flags for certain processes, to prevent future thp mappings. This would be overwritten by do_mlockall(), which sets it back to 0 with an optional VM_LOCKED flag set.
To fix this, instead of overwriting mm->def_flags in do_mlockall(), only the VM_LOCKED flag should be set or cleared.
--- mm/mlock.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
mm/mlock.c +3 -3
@@ -517,11 +517,11 @@ SYSCALL_DEFINE2(munlock, unsigned long,static int do_mlockall (int flags) {struct vm_area_struct * vma, * prev =NULL ; -unsigned int def_flags =0 ;if (flags &MCL_FUTURE ) - def_flags =VM_LOCKED ; - current->mm->def_flags = def_flags; + current->mm->def_flags |=VM_LOCKED ; +else + current->mm->def_flags &= ~VM_LOCKED ;if (flags ==MCL_FUTURE ) goto out;
Greg Kroah-Hartman
maintainerPATCH 4/10 s390/timer: avoid overflow when programming clock comparator
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiko Carstens <[email protected]>
commit d911e03d097bdc01363df5d81c43f69432eb785c upstream.
Since ed4f209 "s390/time: fix sched_clock() overflow" a new helper function is used to avoid overflows when converting TOD format values to nanosecond values.
The kvm interrupt code formerly however only worked by accident because of an overflow. It tried to program a timer that would expire in more than ~29 years. Because of the old TOD-to-nanoseconds overflow bug the real expiry value however was much smaller, but now it isn't anymore.
This however triggers yet another bug in the function that programs the clock comparator s390_next_ktime(): if the absolute "expires" value is after 2042 this will result in an overflow and the programmed value is lower than the current TOD value which immediatly triggers a clock comparator (= timer) interrupt.
Since the timer isn't expired it will be programmed immediately again and so on... the result is a dead system.
To fix this simply program the maximum possible value if an overflow is detected.
--- arch/s390/kernel/time.c | 3 +++ 1 file changed, 3 insertions(+)
arch/s390/kernel/time.c +3 -0
@@ -120,6 +120,9 @@ static int s390_next_ktime(ktime_t expir nsecs =ktime_to_ns (ktime_add (timespec_to_ktime (ts), expires));do_div (nsecs,125 ); S390_lowcore.clock_comparator = sched_clock_base_cc + (nsecs <<9 ); +/* Program the maximum value if we have an overflow (== year 2042) */ +if (unlikely (S390_lowcore.clock_comparator < sched_clock_base_cc)) + S390_lowcore.clock_comparator =-1ULL ;set_clock_comparator (S390_lowcore.clock_comparator);return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 5/10 x86: Do not leak kernel page mapping locations
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <[email protected]>
commit e575a86fdc50d013bf3ad3aa81d9100e8e6cc60d upstream.
Without this patch, it is trivial to determine kernel page mappings by examining the error code reported to dmesg[1]. Instead, declare the entire kernel memory space as a violation of a present page.
Additionally, since show_unhandled_signals is enabled by default, switch branch hinting to the more realistic expectation, and unobfuscate the setting of the PF_PROT bit to improve readability.
[1] http://vulnfactory.org/blog/2013/02/06/a-linux-memory-trick/
--- arch/x86/mm/fault.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
arch/x86/mm/fault.c +5 -3
@@ -748,13 +748,15 @@ __bad_area_nosemaphore(struct pt_regs *r return; }#endif +/* Kernel addresses are always protection faults: */ +if (address >=TASK_SIZE ) + error_code |=PF_PROT ; -if (unlikely (show_unhandled_signals)) +if (likely (show_unhandled_signals))show_signal_msg (regs, error_code, address, tsk); -/* Kernel addresses are always protection faults: */ tsk->thread.cr2 = address; - tsk->thread.error_code = error_code | (address >=TASK_SIZE ); + tsk->thread.error_code = error_code; tsk->thread.trap_nr =X86_TRAP_PF ;force_sig_info_fault (SIGSEGV , si_code, address, tsk,0 );
Greg Kroah-Hartman
maintainerPATCH 6/10 x86/apic: Work around boot failure on HP ProLiant DL980 G7 Server systems
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stoney Wang <[email protected]>
commit cb214ede7657db458fd0b2a25ea0b28dbf900ebc upstream.
When a HP ProLiant DL980 G7 Server boots a regular kernel, there will be intermittent lost interrupts which could result in a hang or (in extreme cases) data loss.
The reason is that this system only supports x2apic physical mode, while the kernel boots with a logical-cluster default setting.
This bug can be worked around by specifying the "x2apic_phys" or "nox2apic" boot option, but we want to handle this system without requiring manual workarounds.
The BIOS sets ACPI_FADT_APIC_PHYSICAL in FADT table. As all apicids are smaller than 255, BIOS need to pass the control to the OS with xapic mode, according to x2apic-spec, chapter 2.9.
Current code handle x2apic when BIOS pass with xapic mode enabled:
When user specifies x2apic_phys, or FADT indicates PHYSICAL:
1. During madt oem check, apic driver is set with xapic logical or xapic phys driver at first.
2. enable_IR_x2apic() will enable x2apic_mode.
3. if user specifies x2apic_phys on the boot line, x2apic_phys_probe() will install the correct x2apic phys driver and use x2apic phys mode. Otherwise it will skip the driver will let x2apic_cluster_probe to take over to install x2apic cluster driver (wrong one) even though FADT indicates PHYSICAL, because x2apic_phys_probe does not check FADT PHYSICAL.
Add checking x2apic_fadt_phys in x2apic_phys_probe() to fix the problem.
--- arch/x86/kernel/apic/x2apic_phys.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
arch/x86/kernel/apic/x2apic_phys.c +11 -10
@@ -20,18 +20,19 @@ static int set_x2apic_phys_mode(char *ar }early_param ("x2apic_phys" , set_x2apic_phys_mode); -static int x2apic_acpi_madt_oem_check (char *oem_id,char *oem_table_id) +static bool x2apic_fadt_phys (void ) { -if (x2apic_phys) -return x2apic_enabled (); -else if ((acpi_gbl_FADT.header.revision >=FADT2_REVISION_ID ) && - (acpi_gbl_FADT.flags &ACPI_FADT_APIC_PHYSICAL ) && -x2apic_enabled ()) { +if ((acpi_gbl_FADT.header.revision >=FADT2_REVISION_ID ) && + (acpi_gbl_FADT.flags &ACPI_FADT_APIC_PHYSICAL )) {printk (KERN_DEBUG "System requires x2apic physical mode\n" ); -return 1 ; +return true; } -else -return 0 ; +return false; +} + +static int x2apic_acpi_madt_oem_check (char *oem_id,char *oem_table_id) +{ +return x2apic_enabled () && (x2apic_phys ||x2apic_fadt_phys ()); } static void
@@ -82,7 +83,7 @@ static void init_x2apic_ldr(void)static int x2apic_phys_probe (void ) { -if (x2apic_mode && x2apic_phys) +if (x2apic_mode && (x2apic_phys ||x2apic_fadt_phys ()))return 1 ;return apic == &apic_x2apic_phys;
Greg Kroah-Hartman
maintainerPATCH 7/10 x86/mm: Check if PUD is large when validating a kernel address
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mel Gorman <[email protected]>
commit 0ee364eb316348ddf3e0dfcd986f5f13f528f821 upstream.
A user reported the following oops when a backup process reads /proc/kcore:
BUG: unable to handle kernel paging request at ffffbb00ff33b000 IP: [<ffffffff8103157e>] kern_addr_valid+0xbe/0x110 [...] Call Trace: [<ffffffff811b8aaa>] read_kcore+0x17a/0x370 [<ffffffff811ad847>] proc_reg_read+0x77/0xc0 [<ffffffff81151687>] vfs_read+0xc7/0x130 [<ffffffff811517f3>] sys_read+0x53/0xa0 [<ffffffff81449692>] system_call_fastpath+0x16/0x1b
Investigation determined that the bug triggered when reading system RAM at the 4G mark. On this system, that was the first address using 1G pages for the virt->phys direct mapping so the PUD is pointing to a physical address, not a PMD page.
The problem is that the page table walker in kern_addr_valid() is not checking pud_large() and treats the physical address as if it was a PMD. If it happens to look like pmd_none then it'll silently fail, probably returning zeros instead of real data. If the data happens to look like a present PMD though, it will be walked resulting in the oops above.
This patch adds the necessary pud_large() check.
Unfortunately the problem was not readily reproducible and now they are running the backup program without accessing /proc/kcore so the patch has not been validated but I think it makes sense.
--- arch/x86/include/asm/pgtable.h | 5 +++++ arch/x86/mm/init_64.c | 3 +++ 2 files changed, 8 insertions(+)
arch/x86/include/asm/pgtable.h +5 -0
@@ -142,6 +142,11 @@ static inline unsigned long pmd_pfn(pmd_return (pmd_val (pmd) &PTE_PFN_MASK ) >>PAGE_SHIFT ; } +static inline unsigned long pud_pfn (pud_t pud) +{ +return (pud_val (pud) &PTE_PFN_MASK ) >>PAGE_SHIFT ; +} +#define pte_page (pte) pfn_to_page(pte_pfn(pte))static inline int pmd_large (pmd_t pte)
arch/x86/mm/init_64.c +3 -0
@@ -829,6 +829,9 @@ int kern_addr_valid(unsigned long addr)if (pud_none (*pud))return 0 ; +if (pud_large (*pud)) +return pfn_valid (pud_pfn (*pud)); + pmd =pmd_offset (pud, addr);if (pmd_none (*pmd))return 0 ;
Greg Kroah-Hartman
maintainerPATCH 8/10 x86/xen: dont assume %ds is usable in xen_iret for 32-bit PVOPS.
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Beulich <[email protected]>
commit 13d2b4d11d69a92574a55bfd985cfb0ca77aebdc upstream.
This fixes CVE-2013-0228 / XSA-42
Drew Jones while working on CVE-2013-0190 found that that unprivileged guest user in 32bit PV guest can use to crash the > guest with the panic like this:
-------------
general protection fault: 0000 [#1] SMP last sysfs file: /sys/devices/vbd-51712/block/xvda/dev Modules linked in: sunrpc ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4
iptable_filter ip_tables ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables ipv6 xen_netfront ext4 mbcache jbd2 xen_blkfront dm_mirror dm_region_hash dm_log dm_mod [last
unloaded: scsi_wait_scan]
Pid: 1250, comm: r Not tainted 2.6.32-356.el6.i686 #1
EIP: 0061:[<c0407462>] EFLAGS: 00010086 CPU: 0
EIP is at xen_iret+0x12/0x2b
EAX: eb8d0000 EBX: 00000001 ECX: 08049860 EDX: 00000010
ESI: 00000000 EDI: 003d0f00 EBP: b77f8388 ESP: eb8d1fe0
DS: 0000 ES: 007b FS: 0000 GS: 00e0 SS: 0069
Process r (pid: 1250, ti=eb8d0000 task=c2953550 task.ti=eb8d0000)
Stack: 00000000 0027f416 00000073 00000206 b77f8364 0000007b 00000000 00000000 Call Trace: Code: c3 8b 44 24 18 81 4c 24 38 00 02 00 00 8d 64 24 30 e9 03 00 00 00 8d 76 00 f7 44 24 08 00 00 02 80 75 33 50 b8 00 e0 ff ff 21 e0 <8b> 40 10 8b 04 85 a0 f6 ab c0 8b 80 0c b0 b3 c0 f6 44 24 0d 02 EIP: [<c0407462>] xen_iret+0x12/0x2b SS:ESP 0069:eb8d1fe0 general protection fault: 0000 [#2] ---[ end trace ab0d29a492dcd330 ]--- Kernel panic - not syncing: Fatal exception Pid: 1250, comm: r Tainted: G D --------------- 2.6.32-356.el6.i686 #1 Call Trace: [<c08476df>] ? panic+0x6e/0x122 [<c084b63c>] ? oops_end+0xbc/0xd0 [<c084b260>] ? do_general_protection+0x0/0x210 [<c084a9b7>] ? error_code+0x73/ -------------
Petr says: "
I've analysed the bug and I think that xen_iret() cannot cope with mangled DS, in this case zeroed out (null selector/descriptor) by either xen_failsafe_callback() or RESTORE_REGS because the corresponding LDT entry was invalidated by the reproducer. "
Jan took a look at the preliminary patch and came up a fix that solves this problem:
"This code gets called after all registers other than those handled by IRET got already restored, hence a null selector in %ds or a non-null one that got loaded from a code or read-only data descriptor would cause a kernel mode fault (with the potential of crashing the kernel as a whole, if panic_on_oops is set)."
The way to fix this is to realize that the we can only relay on the registers that IRET restores. The two that are guaranteed are the %cs and %ss as they are always fixed GDT selectors. Also they are inaccessible from user mode - so they cannot be altered. This is the approach taken in this patch.
Another alternative option suggested by Jan would be to relay on the subtle realization that using the %ebp or %esp relative references uses the %ss segment. In which case we could switch from using %eax to %ebp and would not need the %ss over-rides. That would also require one extra instruction to compensate for the one place where the register is used as scaled index. However Andrew pointed out that is too subtle and if further work was to be done in this code-path it could escape folks attention and lead to accidents.
--- arch/x86/xen/xen-asm_32.S | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
arch/x86/xen/xen-asm_32.S +7 -7
@@ -89,11 +89,11 @@ ENTRY(xen_iret) */ #ifdef CONFIG_SMP GET_THREAD_INFO(%eax) - movl TI_cpu(%eax), %eax - movl __per_cpu_offset(,%eax,4), %eax - mov xen_vcpu(%eax), %eax + movl %ss:TI_cpu(%eax), %eax + movl %ss:__per_cpu_offset(,%eax,4), %eax + mov %ss:xen_vcpu(%eax), %eax #else - movl xen_vcpu, %eax + movl %ss:xen_vcpu, %eax #endif /* check IF state we're restoring */
@@ -106,11 +106,11 @@ ENTRY(xen_iret) * resuming the code, so we don't have to be worried about * being preempted to another CPU. */ - setz XEN_vcpu_info_mask(%eax) + setz %ss:XEN_vcpu_info_mask(%eax) xen_iret_start_crit: /* check for unmasked and pending */ - cmpw $0x0001, XEN_vcpu_info_pending(%eax) + cmpw $0x0001, %ss:XEN_vcpu_info_pending(%eax) /* * If there's something pending, mask events again so we can
@@ -118,7 +118,7 @@ xen_iret_start_crit: * touch XEN_vcpu_info_mask. */ jne 1f - movb $1, XEN_vcpu_info_mask(%eax) + movb $1, %ss:XEN_vcpu_info_mask(%eax) 1: popl %eax
Greg Kroah-Hartman
maintainerPATCH 9/10 PCI/PM: Clean up PME state when removing a device
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Rafael J. Wysocki" <[email protected]>
commit 249bfb83cf8ba658955f0245ac3981d941f746ee upstream.
Devices are added to pci_pme_list when drivers use pci_enable_wake() or pci_wake_from_d3(), but they aren't removed from the list unless the driver explicitly disables wakeup. Many drivers never disable wakeup, so their devices remain on the list even after they are removed, e.g., via hotplug. A subsequent PME poll will oops when it tries to touch the device.
This patch disables PME# on a device before removing it, which removes the device from pci_pme_list. This is safe even if the device never had PME# enabled.
This oops can be triggered by unplugging a Thunderbolt ethernet adapter on a Macbook Pro, as reported by Daniel below.
[bhelgaas: changelog]
Reference: http://lkml.kernel.org/r/CAMVG2svG21yiM1wkH4_2pen2n+cr2-Zv7TbH3Gj+8MwevZjDbw@mail.gmail.com
--- drivers/pci/remove.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/pci/remove.c +2 -0
@@ -19,6 +19,8 @@ static void pci_free_resources(struct pcstatic void pci_stop_dev (struct pci_dev *dev) { +pci_pme_active (dev, false); +if (dev->is_added) {pci_proc_detach_device (dev);pci_remove_sysfs_dev_files (dev);
Greg Kroah-Hartman
maintainerPATCH 10/10 efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot parameter
In reply to Greg Kroah-Hartman3.7-stable review patch. If anyone has any objections, please let me know.
------------------
From: Satoru Takeuchi <[email protected]>
commit 1de63d60cd5b0d33a812efa455d5933bf1564a51 upstream.
There was a serious problem in samsung-laptop that its platform driver is designed to run under BIOS and running under EFI can cause the machine to become bricked or can cause Machine Check Exceptions.
Discussion about this problem:
https://bugs.launchpad.net/ubuntu-cdimage/+bug/1040557
https://bugzilla.kernel.org/show_bug.cgi?id=47121
The patches to fix this problem:
efi: Make 'efi_enabled' a function to query EFI facilities 83e68189745ad931c2afd45d8ee3303929233e7f
samsung-laptop: Disable on EFI hardware
e0094244e41c4d0c7ad69920681972fc45d8ce34
Unfortunately this problem comes back again if users specify "noefi" option. This parameter clears EFI_BOOT and that driver continues to run even if running under EFI. Refer to the document, this parameter should clear EFI_RUNTIME_SERVICES instead.
Documentation/kernel-parameters.txt:
===============================================================================
...
noefi [X86] Disable EFI runtime services support.
...
===============================================================================
Documentation/x86/x86_64/uefi.txt:
===============================================================================
...
- If some or all EFI runtime services don't work, you can try following kernel command line parameters to turn off some or all EFI runtime services.
noefi turn off all EFI runtime services
...
===============================================================================
--- arch/x86/platform/efi/efi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/platform/efi/efi.c +1 -1
@@ -87,7 +87,7 @@ EXPORT_SYMBOL(efi_enabled);static int __init setup_noefi (char *arg) { -clear_bit (EFI_BOOT , &x86_efi_facility); +clear_bit (EFI_RUNTIME_SERVICES , &x86_efi_facility);return 0 ; }early_param ("noefi" , setup_noefi);
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.7.9 release. There are 10 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Feb 17 22:54:03 UTC 2013. Anything received after that time might be too late.
Quoted 8 lines
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.7.9-rc1.gzand the diffstat can be found below.
thanks,
greg k-h
Patches applied cleanly to 3.0.64, 3.4.31, and 3.7.8. Compiled and booted on the following systems:
HP EliteBook 6930p Intel(R) Core(TM)2 Duo CPU T9400 @ 2.53GHz HP ProBook 6475b AMD A10-4600M APU with Radeon(tm) HD Graphics
Reviewed patches
Cross-compile tests results:
alpha: defconfig passed on all
arm: defconfig passed on all
arm64: not applicable to 3.0.y, 3.4.y. defconfig passed on 3.7.y
c6x: not applicable to 3.0.y, defconfig passed on 3.4.y, and 3.7.y.
mips: defconfig passed on all
mipsel: defconfig passed on all
powerpc: wii_defconfig passed on all
sh: defconfig passed on all
sparc: defconfig passed on all
tile: tilegx_defconfig passed on all
-- Shuah