diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-02-22 18:14:57 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-02-22 18:27:29 -0500 |
commit | a84363d6fdba14663b6b155eec604b6c0f6f8866 (patch) | |
tree | bfa5ff35a74041ee312fdbb1f0e2f935e4196ef6 /drivers/acpi/apei | |
parent | 3757b94802fb65d8f696597a74053cf21738da0b (diff) |
ACPI / APEI: Fix crash in apei_hest_parse() for acpi=off
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>
Diffstat (limited to 'drivers/acpi/apei')
-rw-r--r-- | drivers/acpi/apei/hest.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c index 7f00cf38098f..f5ef5d54e4ac 100644 --- a/drivers/acpi/apei/hest.c +++ b/drivers/acpi/apei/hest.c | |||
@@ -89,7 +89,7 @@ int apei_hest_parse(apei_hest_func_t func, void *data) | |||
89 | struct acpi_hest_header *hest_hdr; | 89 | struct acpi_hest_header *hest_hdr; |
90 | int i, rc, len; | 90 | int i, rc, len; |
91 | 91 | ||
92 | if (hest_disable) | 92 | if (hest_disable || !hest_tab) |
93 | return -EINVAL; | 93 | return -EINVAL; |
94 | 94 | ||
95 | hest_hdr = (struct acpi_hest_header *)(hest_tab + 1); | 95 | hest_hdr = (struct acpi_hest_header *)(hest_tab + 1); |
@@ -216,9 +216,6 @@ void __init acpi_hest_init(void) | |||
216 | return; | 216 | return; |
217 | } | 217 | } |
218 | 218 | ||
219 | if (acpi_disabled) | ||
220 | goto err; | ||
221 | |||
222 | status = acpi_get_table(ACPI_SIG_HEST, 0, | 219 | status = acpi_get_table(ACPI_SIG_HEST, 0, |
223 | (struct acpi_table_header **)&hest_tab); | 220 | (struct acpi_table_header **)&hest_tab); |
224 | if (status == AE_NOT_FOUND) | 221 | if (status == AE_NOT_FOUND) |