From: Keir Fraser <keir.xen@gmail.com>
To: Jan Beulich <JBeulich@suse.com>, xen-devel <xen-devel@lists.xen.org>
Cc: ying.huang@intel.com
Subject: Re: [PATCH] ACPI: fix APEI related table size checking
Date: Tue, 16 Oct 2012 16:12:19 +0100 [thread overview]
Message-ID: <CCA337E3.41CC1%keir.xen@gmail.com> (raw)
In-Reply-To: <507D8F6802000078000A1B88@nat28.tlf.novell.com>
On 16/10/2012 15:46, "Jan Beulich" <JBeulich@suse.com> 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@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>
> --- 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@lists.xen.org
> http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2012-10-16 15:12 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-16 14:46 [PATCH] ACPI: fix APEI related table size checking Jan Beulich
2012-10-16 15:12 ` Keir Fraser [this message]
2012-10-17 6:49 ` Huang Ying
2012-10-17 6:56 ` Jan Beulich
2012-10-17 8:52 ` Huang Ying
-- strict thread matches above, loose matches on Subject: below --
2010-07-23 17:39 [PATCH] acpi: fix apei " Yinghai Lu
2010-07-26 4:23 ` Bjorn Helgaas
2010-07-26 7:13 ` Andi Kleen
2010-07-26 7:41 ` Huang Ying
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CCA337E3.41CC1%keir.xen@gmail.com \
--to=keir.xen@gmail.com \
--cc=JBeulich@suse.com \
--cc=xen-devel@lists.xen.org \
--cc=ying.huang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.