From: Ingo Molnar <mingo@kernel.org>
To: Vitaly Kuznetsov <vkuznets@redhat.com>,
Bjorn Helgaas <bhelgaas@google.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 16:48:31 +0100 [thread overview]
Message-ID: <20160312154831.GA2789@gmail.com> (raw)
In-Reply-To: <1457707158-11202-1-git-send-email-vkuznets@redhat.com>
So I'd love to have an ACK from Bjorn. (Full mail quoted below)
Thanks,
Ingo
* Vitaly Kuznetsov <vkuznets@redhat.com> 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;
next prev parent reply other threads:[~2016-03-12 15:48 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 [this message]
2016-03-12 20:58 ` Bjorn Helgaas
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=20160312154831.GA2789@gmail.com \
--to=mingo@kernel.org \
--cc=bhelgaas@google.com \
--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.