aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-02-22 18:14:57 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-02-22 18:27:29 -0500
commita84363d6fdba14663b6b155eec604b6c0f6f8866 (patch)
treebfa5ff35a74041ee312fdbb1f0e2f935e4196ef6
parent3757b94802fb65d8f696597a74053cf21738da0b (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>
-rw-r--r--drivers/acpi/apei/hest.c5
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)