Public bug reported:

This report concerns changes introduced to file
linux-3.2/drivers/firmware/dmi_scan.c as a result of backport of patches
as described in bug #1117693, specifically:
"drivers/firmware/dmi_scan.c: fetch dmi version from SMBIOS if it
exists". This modification has been introduced in kernel 3.2.0-39, as of
this writing the newest kernel for Ubuntu 12.04 LTS. The new logic
attempts to read SMBIOS entry point structure, failing back to DMI entry
point structure if SMBIOS structure is not present. However, if SMBIOS
structure is present but invalid (as happens on older machines), the new
logic fails to properly handle such a case (please see attached patch
for details). As a result DMI information is read incorrectly, and ACPI
is disabled.

Workarounds:
1. Revert to kernel 3.2.0-38, or:
2. Pass acpi=force as kernel boot parameter.

# uname -a
Linux time 3.2.0-39-generic-pae #62-Ubuntu SMP Wed Feb 27 22:25:11 UTC 2013 
i686 i686 i386 GNU/Linux
# lsb_release -rd
Description:    Ubuntu 12.04.2 LTS
Release:        12.04

Additional notes:
As benign as this issue may seem, it resulted in a routine kernel update 
disabling one of my servers. This machine, being past its prime, was relegated 
to a nightly backup duty. The machine would wake up at 3am every night, perform 
a backup, then set an alarm for 3:00 next day (using 
/sys/class/rtc/rtc0/wakealarm) and power off. After a routine update from 
kernel 3.2.0-38 to 3.2.0-39 the machine ceased to function: it would remain 
powered but shut down, and would not perform nightly backups. An investigation 
revealed that the machine reported its SMBIOS structure as being 32 bytes long, 
while SMBIOS specification requires that value to be 31. Apart from this extra 
byte the structure was perfectly valid, but this was enough to make validation 
in dmi_scan.c fail. This resulted in a string of events that disabled the 
machine: the code assumed that SMBIOS structure was invalid, then proceeded to 
read the DMI structure, but failed to do so because of the bug described here. 
Not having the DMI BIOS year, ACPI was disabled, and the wake alarm was not set 
when requested. As a result the machine did not wake up when it was supposed 
to, and failed to perform its main function.

Patch has been tested on three machines, including the affected one.

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: acpi dmi kernel smbios

** Patch added: "Patch to dmi_scan.c"
   
https://bugs.launchpad.net/bugs/1161134/+attachment/3601908/+files/dmi_scan.c.diff

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1161134

Title:
  Regression: Kernel 3.2.0-39 misreads DMI on some machines, disables
  ACPI

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1161134/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to