aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang Ying <ying.huang@intel.com>2010-09-29 07:53:51 -0400
committerLen Brown <len.brown@intel.com>2010-09-29 13:59:18 -0400
commit3a78f965328482eee542217de79036c2a8791de8 (patch)
treecf1cbcdc8e4a67b92f503b5eb9cb403fd113b0c7
parent899611ee7d373e5eeda08e9a8632684e1ebbbf00 (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.c4
-rw-r--r--drivers/acpi/apei/erst.c4
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
427static int einj_check_table(struct acpi_table_einj *einj_tab) 427static 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
751static int erst_check_table(struct acpi_table_erst *erst_tab) 751static 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;