From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Dov Murik <dovmurik@linux.ibm.com>
Cc: "Eduardo Habkost" <eduardo@habkost.net>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"James Bottomley" <jejb@linux.ibm.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
qemu-devel@nongnu.org, "Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Tobin Feldman-Fitzthum" <tobin@linux.ibm.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: Re: [PATCH v3 1/2] hw/i386: Improve bounds checking in OVMF table parsing
Date: Tue, 22 Feb 2022 09:43:31 +0000 [thread overview]
Message-ID: <YhSwQ36N9nq+9n9f@work-vm> (raw)
In-Reply-To: <20220222071906.2632426-2-dovmurik@linux.ibm.com>
* Dov Murik (dovmurik@linux.ibm.com) wrote:
> When pc_system_parse_ovmf_flash() parses the optional GUIDed table in
> the end of the OVMF flash memory area, the table length field is checked
> for sizes that are too small, but doesn't error on sizes that are too
> big (bigger than the flash content itself).
>
> Add a check for maximal size of the OVMF table, and add an error report
> in case the size is invalid. In such a case, an error like this will be
> displayed during launch:
>
> qemu-system-x86_64: OVMF table has invalid size 4047
>
> and the table parsing is skipped.
>
> Signed-off-by: Dov Murik <dovmurik@linux.ibm.com>
Thanks,
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> hw/i386/pc_sysfw_ovmf.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/hw/i386/pc_sysfw_ovmf.c b/hw/i386/pc_sysfw_ovmf.c
> index f4dd92c588..df15c9737b 100644
> --- a/hw/i386/pc_sysfw_ovmf.c
> +++ b/hw/i386/pc_sysfw_ovmf.c
> @@ -24,6 +24,7 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qemu/error-report.h"
> #include "hw/i386/pc.h"
> #include "cpu.h"
>
> @@ -66,7 +67,13 @@ void pc_system_parse_ovmf_flash(uint8_t *flash_ptr, size_t flash_size)
> ptr -= sizeof(uint16_t);
> tot_len = le16_to_cpu(*(uint16_t *)ptr) - sizeof(guid) - sizeof(uint16_t);
>
> - if (tot_len <= 0) {
> + if (tot_len < 0 || tot_len > (ptr - flash_ptr)) {
> + error_report("OVMF table has invalid size %d", tot_len);
> + return;
> + }
> +
> + if (tot_len == 0) {
> + /* no entries in the OVMF table */
> return;
> }
>
> --
> 2.25.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2022-02-22 9:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-22 7:19 [PATCH v3 0/2] hw/i386: OVMF table parsing fixes Dov Murik
2022-02-22 7:19 ` [PATCH v3 1/2] hw/i386: Improve bounds checking in OVMF table parsing Dov Murik
2022-02-22 9:23 ` Daniel P. Berrangé
2022-02-22 9:43 ` Dr. David Alan Gilbert [this message]
2022-02-22 7:19 ` [PATCH v3 2/2] hw/i386: Replace magic number with field length calculation Dov Murik
2022-02-22 9:25 ` Daniel P. Berrangé
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=YhSwQ36N9nq+9n9f@work-vm \
--to=dgilbert@redhat.com \
--cc=berrange@redhat.com \
--cc=dovmurik@linux.ibm.com \
--cc=eduardo@habkost.net \
--cc=f4bug@amsat.org \
--cc=jejb@linux.ibm.com \
--cc=kraxel@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=tobin@linux.ibm.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.