From: Bjorn Helgaas <helgaas@kernel.org>
To: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
Cathy Avery <cavery@redhat.com>,
"K. Y. Srinivasan" <kys@microsoft.com>
Subject: Re: [PATCH v2] x86: don't assume all fb devices are PCI devices
Date: Mon, 14 Mar 2016 10:28:07 -0500 [thread overview]
Message-ID: <20160314152807.GA13471@localhost> (raw)
In-Reply-To: <1457966577-4006-1-git-send-email-vkuznets@redhat.com>
On Mon, Mar 14, 2016 at 03:42:57PM +0100, Vitaly Kuznetsov wrote:
> When booting Hyper-V Generation 2 guests KASAN reports the following
> out-of-bounds access:
>
> BUG: KASAN: slab-out-of-bounds in fb_is_primary_device+0x58/0x70 at addr
> ffff880079cf0eb0
> Read of size 8 by task swapper/0/1
> ...
> [<ffffffff81581308>] dump_stack+0x63/0x8b
> [<ffffffff812e1f99>] print_trailer+0xf9/0x150
> [<ffffffff812e7344>] object_err+0x34/0x40
> [<ffffffff812e9630>] kasan_report_error+0x230/0x550
> [<ffffffff812e9ee8>] kasan_report+0x58/0x60
> [<ffffffff812e4500>] ? ___slab_alloc+0x80/0x490
> [<ffffffff81878a28>] ? fb_is_primary_device+0x58/0x70
> [<ffffffff812e87cd>] __asan_load8+0x5d/0x70
> [<ffffffff81878a28>] fb_is_primary_device+0x58/0x70
> [<ffffffff8162357a>] register_framebuffer+0xda/0x5b0
> [<ffffffff816234a0>] ? remove_conflicting_framebuffers+0x50/0x50
> ...
>
> The issue is caused by the to_pci_dev() call with no check that the given
> info->device is in fact a pci device and some fb devices (Hyper-V FB, EFI
> FB,...) are not.
>
> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> ---
> Changes since v1: use dev_is_pci() instead of full scan [Bjorn Helgaas].
> ---
> arch/x86/video/fbdev.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/video/fbdev.c b/arch/x86/video/fbdev.c
> index d5644bb..9f2fe63 100644
> --- a/arch/x86/video/fbdev.c
> +++ b/arch/x86/video/fbdev.c
> @@ -18,12 +18,11 @@ int fb_is_primary_device(struct fb_info *info)
> struct pci_dev *default_device = vga_default_device();
> struct resource *res = NULL;
The initializations of "pci_dev" and "res" to NULL are now
unnecessary.
>
> - if (device)
> - pci_dev = to_pci_dev(device);
> -
> - if (!pci_dev)
> + if (!device || !dev_is_pci(device))
> return 0;
>
> + pci_dev = to_pci_dev(device);
> +
> if (default_device) {
> if (pci_dev == default_device)
> return 1;
The test for non-NULL "res" below is superfluous because we know
"pci_dev" is non-NULL:
res = &pci_dev->resource[PCI_ROM_RESOURCE];
if (res && res->flags & IORESOURCE_ROM_SHADOW)
I think your patch is functionally correct, so it's up to you and the
x86 guys whether you want to do these additional cleanups.
Bjorn
next prev parent reply other threads:[~2016-03-14 15:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-14 14:42 [PATCH v2] x86: don't assume all fb devices are PCI devices Vitaly Kuznetsov
2016-03-14 15:28 ` Bjorn Helgaas [this message]
2016-03-14 16:33 ` Ingo Molnar
2016-03-14 16:48 ` Vitaly Kuznetsov
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=20160314152807.GA13471@localhost \
--to=helgaas@kernel.org \
--cc=cavery@redhat.com \
--cc=hpa@zytor.com \
--cc=kys@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=x86@kernel.org \
/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.