ACPI / APEI: Fix crash in apei_hest_parse() for acpi=off
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 22 Feb 2013 23:14:57 +0000 (00:14 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 22 Feb 2013 23:27:29 +0000 (00:27 +0100)
After commit 92ef2a2 (ACPI: Change the ordering of PCI root bridge
driver registrarion), acpi_hest_init() is never called for acpi=off
(acpi_disabled), so hest_disable is not set, but hest_tab is NULL,
which causes apei_hest_parse() to crash when it is called from
aer_acpi_firmware_first().

Fix that by making apei_hest_parse() check if hest_tab is not NULL
in addition to checking hest_disable.  Also remove the now useless
acpi_disabled check from apei_hest_parse().

Reported-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/apei/hest.c

index 7f00cf38098f21bdbe0d6a69ba624d18b00f7cb3..f5ef5d54e4ac2ec4c6d4a963ed6b6f3fd7f16ca1 100644 (file)
@@ -89,7 +89,7 @@ int apei_hest_parse(apei_hest_func_t func, void *data)
        struct acpi_hest_header *hest_hdr;
        int i, rc, len;
 
-       if (hest_disable)
+       if (hest_disable || !hest_tab)
                return -EINVAL;
 
        hest_hdr = (struct acpi_hest_header *)(hest_tab + 1);
@@ -216,9 +216,6 @@ void __init acpi_hest_init(void)
                return;
        }
 
-       if (acpi_disabled)
-               goto err;
-
        status = acpi_get_table(ACPI_SIG_HEST, 0,
                                (struct acpi_table_header **)&hest_tab);
        if (status == AE_NOT_FOUND)