From: Slawomir Stepien <sst@poczta.fm>
To: syzbot <syzbot@kernel.org>
Cc: syzkaller-upstream-moderation@googlegroups.com, syzbot@lists.linux.dev
Subject: Re: [PATCH RFC v2] drm/cirrus-qemu: Validate BAR0 size during probe
Date: Tue, 25 Aug 2026 09:30:31 +0200 [thread overview]
Message-ID: <ao1ElwtHx3VIuovW@nr200> (raw)
In-Reply-To: <6e3c9a45-9c40-4717-9474-7abd0880ad79@mail.kernel.org>
#syz upstream
On sie 24, 2026 13:12, syzbot wrote:
> The `cirrus-qemu` driver relies on `CIRRUS_VRAM_SIZE` (4 MB) to validate
> framebuffer sizes. However, during PCI probe, the driver mapped BAR0
> without verifying that its size matches `CIRRUS_VRAM_SIZE`.
>
> If a PCI device with a BAR0 smaller than 4 MB is bound to the driver, the
> mapped VRAM will be smaller than expected. Because validation checks assume
> 4 MB VRAM, framebuffers larger than the mapped memory can be created.
>
> When the display plane is updated (e.g. during release),
> `cirrus_primary_plane_helper_atomic_update()` copies the framebuffer to
> VRAM using `drm_fb_memcpy()`. Writing past the end of the mapped I/O memory
> causes a supervisor write page fault:
>
> BUG: unable to handle page fault for address: ffffc9000389c000
> #PF: supervisor write access in kernel mode
> #PF: error_code(0x0002) - not-present page
> ...
> RIP: 0010:memcpy_toio+0x7c/0xe0 arch/x86/lib/iomem.c:110
> ...
> Call Trace:
> <TASK>
> iosys_map_memcpy_to include/linux/iosys-map.h:285 [inline]
> drm_fb_memcpy+0x325/0x5d0 drivers/gpu/drm/drm_format_helper.c:442
> cirrus_primary_plane_helper_atomic_update+0x98a/0xb00
> drivers/gpu/drm/tiny/cirrus-qemu.c:358
> drm_atomic_helper_commit_planes+0x626/0xea0
> drivers/gpu/drm/drm_atomic_helper.c:3038
> drm_atomic_helper_commit_tail+0x60/0x510
> drivers/gpu/drm/drm_atomic_helper.c:1989
> commit_tail+0x2b1/0x3c0 drivers/gpu/drm/drm_atomic_helper.c:2074
> drm_atomic_helper_commit+0xa77/0xb10
> drivers/gpu/drm/drm_atomic_helper.c:2312
>
> Fix this by validating in `cirrus_pci_probe()` that the PCI BAR0 resource
> length equals `CIRRUS_VRAM_SIZE`, returning `-ENODEV` if it does not match.
>
> Fixes: ab3e023b1b4c ("drm/cirrus: rewrite and modernize driver.")
> Assisted-by: Gemini:gemini-3.6-flash Gemini:gemini-3.1-pro-preview syzbot
> Reported-by: syzbot+2442951a6abb004df963@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=2442951a6abb004df963
> Link: https://syzkaller.appspot.com/ai_job?id=ba262a3a-bccf-4ad8-a1b0-583c55d34fd6
> To: "David Airlie" <airlied@gmail.com>
> To: "Dave Airlie" <airlied@redhat.com>
> To: <dri-devel@lists.freedesktop.org>
> To: "Gerd Hoffmann" <kraxel@redhat.com>
> To: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>
> To: "Maxime Ripard" <mripard@kernel.org>
> To: "Simona Vetter" <simona@ffwll.ch>
> To: "Thomas Zimmermann" <tzimmermann@suse.de>
> To: <virtualization@lists.linux.dev>
> Cc: "Jani Nikula" <jani.nikula@intel.com>
> Cc: <linux-kernel@vger.kernel.org>
>
> ---
> v2:
> - Reject device in probe if PCI BAR0 resource length does not equal CIRRUS_VRAM_SIZE instead of dynamically tracking VRAM size.
> - Retain CIRRUS_VRAM_SIZE and keep atomic check and mode validation hooks unchanged.
>
> v1:
> https://lore.kernel.org/all/6e0e7e49-c50d-472e-9cc2-ceaf814e0fc7@mail.kernel.org/T/
> ---
> diff --git a/drivers/gpu/drm/tiny/cirrus-qemu.c b/drivers/gpu/drm/tiny/cirrus-qemu.c
> index 075221b43..70c995025 100644
> --- a/drivers/gpu/drm/tiny/cirrus-qemu.c
> +++ b/drivers/gpu/drm/tiny/cirrus-qemu.c
> @@ -602,6 +602,9 @@ static int cirrus_pci_probe(struct pci_dev *pdev,
>
> dev = &cirrus->dev;
>
> + if (pci_resource_len(pdev, 0) != CIRRUS_VRAM_SIZE)
> + return -ENODEV;
> +
> cirrus->vram = devm_ioremap(&pdev->dev, pci_resource_start(pdev, 0),
> pci_resource_len(pdev, 0));
> if (cirrus->vram == NULL)
>
>
> base-commit: db2ddb87143519e20a95aa36c60b36107b736a58
--
Slawomir Stepien
prev parent reply other threads:[~2026-08-25 7:30 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-24 13:12 [PATCH RFC v2] drm/cirrus-qemu: Validate BAR0 size during probe syzbot
2026-08-25 7:30 ` Slawomir Stepien [this message]
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=ao1ElwtHx3VIuovW@nr200 \
--to=sst@poczta.fm \
--cc=syzbot@kernel.org \
--cc=syzbot@lists.linux.dev \
--cc=syzkaller-upstream-moderation@googlegroups.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.