From: sashiko-bot@kernel.org
To: "Ziming Du" <duziming2@huawei.com>
Cc: linux-pci@vger.kernel.org
Subject: Re: [PATCH v2 3/6] PCI/proc: Warn on writes to driver-exclusive config regions
Date: Thu, 30 Jul 2026 03:17:34 +0000 [thread overview]
Message-ID: <20260730031734.A89D41F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260730032438.1643450-4-duziming2@huawei.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [Low] The format string in pci_warn_once lacks a terminating newline character.
Pre-existing issues:
- [High] The return values of __get_user() are ignored in proc_bus_pci_write(), leading to silent hardware writes of zero or uninitialized data on fault.
- [High] proc_bus_pci_write() performs unaligned user memory accesses via __get_user(), violating API constraints and potentially triggering alignment faults.
--
--- Patch [3]: [PATCH v2 3/6] PCI/proc: Warn on writes to driver-exclusive config regions ---
commit 7011bc96a28549a7bd6d8b00360cce10cb406486
Author: Ziming Du <duziming2@huawei.com>
PCI/proc: Warn on writes to driver-exclusive config regions
The sysfs configuration-space write path warns and taints the kernel
when userspace writes a region claimed exclusively by a driver. The
procfs path can access the same configuration space but does not perform
this check.
Add the same resource_is_exclusive() warning and taint to
proc_bus_pci_write() so the two userspace interfaces treat driver-owned
ranges consistently.
Fixes: 278294798ac9 ("PCI: Allow drivers to request exclusive config regions")
> diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
> index ec2338c1e667e..3f041765da978 100644
> --- a/drivers/pci/proc.c
> +++ b/drivers/pci/proc.c
> @@ -122,6 +122,13 @@ static ssize_t proc_bus_pci_write(struct file *file, const char __user *buf,
> if (ret)
> return ret;
>
> + if (resource_is_exclusive(&dev->driver_exclusive_resource, pos,
> + nbytes)) {
> + pci_warn_once(dev, "%s: Unexpected write to kernel-exclusive config offset %llx",
> + current->comm, pos);
[Severity: Low]
Is a trailing \n character needed for this format string?
Without it, subsequent kernel log messages from any subsystem might be
appended to the same line, resulting in garbled dmesg output.
> + add_taint(TAINT_USER, LOCKDEP_STILL_OK);
> + }
> +
> if (pos >= size)
> return 0;
drivers/pci/proc.c:proc_bus_pci_write() {
...
if ((pos & 1) && cnt) {
unsigned char val;
__get_user(val, buf);
pci_user_write_config_byte(dev, pos, val);
...
}
[Severity: High]
This is a pre-existing issue, but is the return value of __get_user() being
safely ignored here?
If __get_user() fails (e.g., due to an unmapped buffer or an unhandled page
fault), it returns -EFAULT.
By ignoring this return value, the kernel silently proceeds to write zero
(or potentially uninitialized stack data on older architectures) to the PCI
hardware configuration space instead of aborting.
drivers/pci/proc.c:proc_bus_pci_write() {
...
if ((pos & 1) && cnt) {
unsigned char val;
__get_user(val, buf);
pci_user_write_config_byte(dev, pos, val);
buf++;
pos++;
cnt--;
}
if ((pos & 3) && cnt > 2) {
__le16 val;
__get_user(val, (__le16 __user *) buf);
...
}
[Severity: High]
This is also a pre-existing issue, but could this sequence lead to unaligned
user memory accesses?
If a privileged user issues a write with an odd offset (pos & 1) and
length > 2, the code reads the first byte and increments buf by 1.
This makes the pointer unaligned before casting it to (__le16 __user *) for
the next __get_user() call.
Passing an unaligned pointer can trigger a kernel oops on strict-alignment
architectures that lack unaligned kernel access fixups, or it may return a
silent -EFAULT.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260730032438.1643450-1-duziming2@huawei.com?part=3
next prev parent reply other threads:[~2026-07-30 3:17 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-30 3:24 [PATCH v2 0/6] PCI: Fix procfs PCI config access issues Ziming Du
2026-07-30 3:24 ` [PATCH v2 1/6] PCI: Prevent overflow in proc_bus_pci_{read,write}() Ziming Du
2026-07-30 3:16 ` sashiko-bot
2026-07-30 3:24 ` [PATCH v2 2/6] PCI/proc: Serialize config inode size updates Ziming Du
2026-07-30 3:13 ` sashiko-bot
2026-07-30 3:24 ` [PATCH v2 3/6] PCI/proc: Warn on writes to driver-exclusive config regions Ziming Du
2026-07-30 3:17 ` sashiko-bot [this message]
2026-07-30 3:24 ` [PATCH v2 4/6] PCI/sysfs: Avoid runtime PM at config-space EOF Ziming Du
2026-07-30 3:09 ` sashiko-bot
2026-07-30 3:24 ` [PATCH v2 5/6] PCI: Align proc_bus_pci_write() with pci_write_config() Ziming Du
2026-07-30 3:16 ` sashiko-bot
2026-07-30 3:24 ` [PATCH v2 6/6] PCI: Align proc_bus_pci_read() with pci_read_config() Ziming Du
2026-07-30 3:14 ` sashiko-bot
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=20260730031734.A89D41F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=duziming2@huawei.com \
--cc=linux-pci@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox