ACPI: fix APEI related table size checking
authorHuang Ying <ying.huang@intel.com>
Tue, 16 Oct 2012 15:26:36 +0000 (17:26 +0200)
committerHuang Ying <ying.huang@intel.com>
Tue, 16 Oct 2012 15:26:36 +0000 (17:26 +0200)
commit915ef37d7cc8fcac5b37eb0b40c693754fcd12ab
treec396c41fc57983ffabe7079115d8722c0f08a989
parent02be82737e0659e231d0be71d5d5de1081cef295
ACPI: 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.

Originally-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Huang Ying <ying.huang@intel.com>
- use switch() for better readability
- add comment explaining why a formally invalid size it also being
  accepted
- check erst_tab->header.length before even looking at
  erst_tab->header_length
- prefer sizeof(*erst_tab) over sizeof(struct acpi_table_erst)

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
Committed-by: Jan Beulich <jbeulich@suse.com>
xen/drivers/acpi/apei/erst.c