From: Michael Tautschnig <tautschn@amazon.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Michael Tautschnig <tautschn@amazon.com>, <stable@vger.kernel.org>
Subject: [PATCH] staging: vme_user: fix heap OOB in buffer_from_user and buffer_to_user
Date: Sun, 14 Jun 2026 21:53:08 +0200 [thread overview]
Message-ID: <20260614195318.40397-1-tautschn@amazon.com> (raw)
The SLAVE-path read/write helpers buffer_to_user() and
buffer_from_user() copy 'count' bytes into/out of the fixed-size
kern_buf (PCI_BUF_SIZE = 0x20000 = 128 KiB) without bounding
count against size_buf.
The caller vme_user_write()/vme_user_read() only clamps count to
the VME window size (image_size = vme_get_size(resource)), which
VME_SET_SLAVE sets from user-supplied slave.size — validated
against the VME address space (up to VME_A32_MAX = 4 GiB), NOT
against PCI_BUF_SIZE. When the window exceeds 128 KiB, a
write()/read() copies past the kern_buf allocation.
Fix by clamping count against size_buf in both buffer_from_user()
and buffer_to_user(), with an early return when *ppos >= size_buf.
This mirrors the existing bounds check in resource_from_user() (the
MASTER-path helper).
The bug was found by static analysis (CodeQL taint tracking + CBMC
bounded model checking) and dynamically confirmed under KASAN with
the vme_fake bridge:
BUG: KASAN: slab-out-of-bounds in _copy_from_user+0x2d/0x80
Write of size 262144 at addr ffff888004100000 by task trigger/68
_copy_from_user+0x2d/0x80
vme_user_write+0x13e/0x240 [vme_user]
vfs_write+0x1b8/0x7a0
ksys_write+0xb8/0x150
Cc: stable@vger.kernel.org
Signed-off-by: Michael Tautschnig <tautschn@amazon.com>
---
drivers/staging/vme_user/vme_user.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/staging/vme_user/vme_user.c b/drivers/staging/vme_user/vme_user.c
index 5829a4141..bacf6a7d6 100644
--- a/drivers/staging/vme_user/vme_user.c
+++ b/drivers/staging/vme_user/vme_user.c
@@ -156,6 +156,15 @@ static ssize_t buffer_to_user(unsigned int minor, char __user *buf,
{
void *image_ptr;
+ /* Clamp to the fixed kern_buf (size_buf): the VME window
+ * (image_size) may exceed PCI_BUF_SIZE, so *ppos + count can
+ * run past kern_buf otherwise.
+ */
+ if (*ppos >= image[minor].size_buf)
+ return 0;
+ if (count > image[minor].size_buf - *ppos)
+ count = image[minor].size_buf - *ppos;
+
image_ptr = image[minor].kern_buf + *ppos;
if (copy_to_user(buf, image_ptr, (unsigned long)count))
return -EFAULT;
@@ -168,6 +177,15 @@ static ssize_t buffer_from_user(unsigned int minor, const char __user *buf,
{
void *image_ptr;
+ /* Clamp to the fixed kern_buf (size_buf): the VME window
+ * (image_size) may exceed PCI_BUF_SIZE, so *ppos + count can
+ * run past kern_buf otherwise.
+ */
+ if (*ppos >= image[minor].size_buf)
+ return 0;
+ if (count > image[minor].size_buf - *ppos)
+ count = image[minor].size_buf - *ppos;
+
image_ptr = image[minor].kern_buf + *ppos;
if (copy_from_user(image_ptr, buf, (unsigned long)count))
return -EFAULT;
--
2.43.0
Amazon Development Center Austria GmbH
Brueckenkopfgasse 1
8020 Graz
Oesterreich
Sitz in Graz
Firmenbuchnummer: FN 439453 f
Firmenbuchgericht: Landesgericht fuer Zivilrechtssachen Graz
next reply other threads:[~2026-06-14 19:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-14 19:53 Michael Tautschnig [this message]
2026-06-15 2:27 ` [PATCH] staging: vme_user: fix heap OOB in buffer_from_user and buffer_to_user Greg Kroah-Hartman
2026-06-18 11:46 ` Michael Tautschnig
2026-06-18 11:47 ` [PATCH v2] staging: vme_user: bound slave read/write to the kern_buf size Michael Tautschnig
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=20260614195318.40397-1-tautschn@amazon.com \
--to=tautschn@amazon.com \
--cc=gregkh@linuxfoundation.org \
--cc=stable@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox