diff options
author | Huang Ying <ying.huang@intel.com> | 2010-09-29 19:53:51 +0800 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2010-09-29 13:59:18 -0400 |
commit | 3a78f965328482eee542217de79036c2a8791de8 (patch) | |
tree | cf1cbcdc8e4a67b92f503b5eb9cb403fd113b0c7 /drivers/acpi/apei/erst.c | |
parent | 899611ee7d373e5eeda08e9a8632684e1ebbbf00 (diff) | |
download | op-kernel-dev-3a78f965328482eee542217de79036c2a8791de8.zip op-kernel-dev-3a78f965328482eee542217de79036c2a8791de8.tar.gz |
ACPI, APEI, Fix APEI related table size checking
On Huang Ying's machine:
erst_tab->header_length == sizeof(struct acpi_table_einj)
but Yinghai reported that on his machine,
erst_tab->header_length == sizeof(struct acpi_table_einj) -
sizeof(struct acpi_table_header)
To make erst table size checking code works on all systems, both
testing are treated as PASS.
Same situation applies to einj_tab->header_length, so corresponding
table size checking is changed in similar way too.
v2:
- Treat both table size as valid
Originally-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/apei/erst.c')
-rw-r--r-- | drivers/acpi/apei/erst.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 18645f4..10cc192 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c @@ -750,7 +750,9 @@ __setup("erst_disable", setup_erst_disable); static int erst_check_table(struct acpi_table_erst *erst_tab) { - if (erst_tab->header_length != sizeof(struct acpi_table_erst)) + if ((erst_tab->header_length != + (sizeof(struct acpi_table_erst) - sizeof(erst_tab->header))) + && (erst_tab->header_length != sizeof(struct acpi_table_einj))) return -EINVAL; if (erst_tab->header.length < sizeof(struct acpi_table_erst)) return -EINVAL; |