diff options
author | Huang Ying <ying.huang@intel.com> | 2010-09-29 07:53:51 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2010-09-29 13:59:18 -0400 |
commit | 3a78f965328482eee542217de79036c2a8791de8 (patch) | |
tree | cf1cbcdc8e4a67b92f503b5eb9cb403fd113b0c7 | |
parent | 899611ee7d373e5eeda08e9a8632684e1ebbbf00 (diff) |
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>
-rw-r--r-- | drivers/acpi/apei/einj.c | 4 | ||||
-rw-r--r-- | drivers/acpi/apei/erst.c | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/drivers/acpi/apei/einj.c b/drivers/acpi/apei/einj.c index 465c885938ee..cf29df69380b 100644 --- a/drivers/acpi/apei/einj.c +++ b/drivers/acpi/apei/einj.c | |||
@@ -426,7 +426,9 @@ DEFINE_SIMPLE_ATTRIBUTE(error_inject_fops, NULL, | |||
426 | 426 | ||
427 | static int einj_check_table(struct acpi_table_einj *einj_tab) | 427 | static int einj_check_table(struct acpi_table_einj *einj_tab) |
428 | { | 428 | { |
429 | if (einj_tab->header_length != sizeof(struct acpi_table_einj)) | 429 | if ((einj_tab->header_length != |
430 | (sizeof(struct acpi_table_einj) - sizeof(einj_tab->header))) | ||
431 | && (einj_tab->header_length != sizeof(struct acpi_table_einj))) | ||
430 | return -EINVAL; | 432 | return -EINVAL; |
431 | if (einj_tab->header.length < sizeof(struct acpi_table_einj)) | 433 | if (einj_tab->header.length < sizeof(struct acpi_table_einj)) |
432 | return -EINVAL; | 434 | return -EINVAL; |
diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 18645f4e83cd..10cc1928ec23 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c | |||
@@ -750,7 +750,9 @@ __setup("erst_disable", setup_erst_disable); | |||
750 | 750 | ||
751 | static int erst_check_table(struct acpi_table_erst *erst_tab) | 751 | static int erst_check_table(struct acpi_table_erst *erst_tab) |
752 | { | 752 | { |
753 | if (erst_tab->header_length != sizeof(struct acpi_table_erst)) | 753 | if ((erst_tab->header_length != |
754 | (sizeof(struct acpi_table_erst) - sizeof(erst_tab->header))) | ||
755 | && (erst_tab->header_length != sizeof(struct acpi_table_einj))) | ||
754 | return -EINVAL; | 756 | return -EINVAL; |
755 | if (erst_tab->header.length < sizeof(struct acpi_table_erst)) | 757 | if (erst_tab->header.length < sizeof(struct acpi_table_erst)) |
756 | return -EINVAL; | 758 | return -EINVAL; |