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] x86: don't assume all fb devices are PCI devices
Date: Sat, 12 Mar 2016 14:58:24 -0600 [thread overview]
Message-ID: <20160312205824.GA26840@localhost> (raw)
In-Reply-To: <1457707158-11202-1-git-send-email-vkuznets@redhat.com>
On Fri, Mar 11, 2016 at 03:39:18PM +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. fb_is_primary_device() is not on any performance critical
> path, replace to_pci_dev() with raw scan.
>
> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
> ---
> arch/x86/video/fbdev.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/video/fbdev.c b/arch/x86/video/fbdev.c
> index d5644bb..f309d6c 100644
> --- a/arch/x86/video/fbdev.c
> +++ b/arch/x86/video/fbdev.c
> @@ -14,12 +14,18 @@
> int fb_is_primary_device(struct fb_info *info)
> {
> struct device *device = info->device;
> - struct pci_dev *pci_dev = NULL;
> + struct pci_dev *dev = NULL, *pci_dev = NULL;
> struct pci_dev *default_device = vga_default_device();
> struct resource *res = NULL;
>
> - if (device)
> - pci_dev = to_pci_dev(device);
> + /*
> + * We're not sure info->device is a pci device, do full scan instead
> + * of to_pci_dev().
> + */
> + for_each_pci_dev(dev) {
> + if (&dev->dev == device)
> + pci_dev = dev;
> + }
> if (!pci_dev)
> return 0;
I think dev_is_pci() is a better solution:
if (!device || !dev_is_pci(device))
return 0;
pci_dev = to_pci_dev(device);
if (vga_default_device()) {
if (vga_default_device() == pci_dev)
return 1;
return 0;
}
res = &pci_dev->resource[PCI_ROM_RESOURCE];
if (res->flags & IORESOURCE_ROM_SHADOW)
return 1;
return 0;
This says a non-PCI device cannot be the primary device. I don't know
framebuffers, so I don't know if that's what you really want, but I
guess it's what the original code says.
Bjorn
next prev parent reply other threads:[~2016-03-12 20:58 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-11 14:39 [PATCH] x86: don't assume all fb devices are PCI devices Vitaly Kuznetsov
2016-03-12 15:48 ` Ingo Molnar
2016-03-12 20:58 ` Bjorn Helgaas [this message]
2016-03-14 9:52 ` 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=20160312205824.GA26840@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.