[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] ACPI: fix APEI related table size checking
On 16/10/2012 15:46, "Jan Beulich" <JBeulich@xxxxxxxx> wrote: > 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@xxxxxxxxxx> > Signed-off-by: Huang Ying <ying.huang@xxxxxxxxx> > > - 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@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> > --- a/xen/drivers/acpi/apei/erst.c > +++ b/xen/drivers/acpi/apei/erst.c > @@ -715,12 +715,23 @@ int erst_clear(u64 record_id) > > static int __init 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(*erst_tab)) > return -EINVAL; > - if (erst_tab->header.length < sizeof(struct acpi_table_erst)) > + > + switch (erst_tab->header_length) { > + case sizeof(*erst_tab) - sizeof(erst_tab->header): > + /* > + * While invalid per specification, there are (early?) systems > + * indicating the full header size here, so accept that value too. > + */ > + case sizeof(*erst_tab): > + break; > + default: > return -EINVAL; > + } > + > if (erst_tab->entries != > - (erst_tab->header.length - sizeof(struct acpi_table_erst)) / > + (erst_tab->header.length - sizeof(*erst_tab)) / > sizeof(struct acpi_erst_entry)) > return -EINVAL; > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |