All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Iván Ezequiel Rodriguez" <ivanrwcm25@gmail.com>
To: kraxel@redhat.com, vivek.kasireddy@intel.com
Cc: dri-devel@lists.freedesktop.org,
	linux-kselftest@lists.kernel.org, linux-kernel@vger.kernel.org,
	"Iván Ezequiel Rodriguez" <ivanrwcm25@gmail.com>
Subject: [PATCH 1/1] udmabuf: reject unknown UDMABUF_CREATE flags
Date: Wed,  1 Jul 2026 14:21:59 -0300	[thread overview]
Message-ID: <20260701172159.270872-2-ivanrwcm25@gmail.com> (raw)
In-Reply-To: <20260701172159.270872-1-ivanrwcm25@gmail.com>

UDMABUF_CREATE and UDMABUF_CREATE_LIST only define
UDMABUF_FLAGS_CLOEXEC. Unknown flag bits were silently masked
before returning a dmabuf fd, so userspace could not detect
unsupported flags. Reject them with -EINVAL, consistent with
dma-heap flag validation.

Document the flag semantics in udmabuf.h and add a selftest.

Signed-off-by: Iván Ezequiel Rodriguez <ivanrwcm25@gmail.com>
---
 drivers/dma-buf/udmabuf.c                         |  3 +++
 include/uapi/linux/udmabuf.h                      | 13 +++++++++++++
 tools/testing/selftests/drivers/dma-buf/udmabuf.c | 14 +++++++++++++-
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
index bced421c0d65..fb36c0d9ffe7 100644
--- a/drivers/dma-buf/udmabuf.c
+++ b/drivers/dma-buf/udmabuf.c
@@ -358,6 +358,9 @@ static long udmabuf_create(struct miscdevice *device,
 	long ret = -EINVAL;
 	u32 i, flags;
 
+	if (head->flags & ~UDMABUF_FLAGS_CLOEXEC)
+		return -EINVAL;
+
 	ubuf = kzalloc(sizeof(*ubuf), GFP_KERNEL);
 	if (!ubuf)
 		return -ENOMEM;
diff --git a/include/uapi/linux/udmabuf.h b/include/uapi/linux/udmabuf.h
index 46b6532ed855..e267856dd510 100644
--- a/include/uapi/linux/udmabuf.h
+++ b/include/uapi/linux/udmabuf.h
@@ -7,6 +7,13 @@
 
 #define UDMABUF_FLAGS_CLOEXEC	0x01
 
+/**
+ * struct udmabuf_create - parameters for %UDMABUF_CREATE
+ * @memfd: memfd containing the memory to export
+ * @flags: %UDMABUF_FLAGS_CLOEXEC only; unknown bits are rejected
+ * @offset: byte offset into @memfd (page aligned)
+ * @size: number of bytes to export (page aligned, non-zero)
+ */
 struct udmabuf_create {
 	__u32 memfd;
 	__u32 flags;
@@ -21,6 +28,12 @@ struct udmabuf_create_item {
 	__u64 size;
 };
 
+/**
+ * struct udmabuf_create_list - parameters for %UDMABUF_CREATE_LIST
+ * @flags: %UDMABUF_FLAGS_CLOEXEC only; unknown bits are rejected
+ * @count: number of entries in @list (non-zero, capped by driver)
+ * @list: flexible array of memfd regions to combine
+ */
 struct udmabuf_create_list {
 	__u32 flags;
 	__u32 count;
diff --git a/tools/testing/selftests/drivers/dma-buf/udmabuf.c b/tools/testing/selftests/drivers/dma-buf/udmabuf.c
index d78aec662586..95c781855404 100644
--- a/tools/testing/selftests/drivers/dma-buf/udmabuf.c
+++ b/tools/testing/selftests/drivers/dma-buf/udmabuf.c
@@ -138,7 +138,7 @@ int main(int argc, char *argv[])
 	void *addr1, *addr2;
 
 	ksft_print_header();
-	ksft_set_plan(7);
+	ksft_set_plan(8);
 
 	devfd = open("/dev/udmabuf", O_RDWR);
 	if (devfd < 0) {
@@ -189,6 +189,18 @@ int main(int argc, char *argv[])
 	else
 		ksft_test_result_pass("%s: [PASS,test-2]\n", TEST_PREFIX);
 
+	/* should fail (unknown flags) */
+	create.memfd  = memfd;
+	create.offset = 0;
+	create.size   = size;
+	create.flags  = UDMABUF_FLAGS_CLOEXEC | 0x2;
+	buf = ioctl(devfd, UDMABUF_CREATE, &create);
+	if (buf >= 0)
+		ksft_test_result_fail("%s: [FAIL,test-unknown-flags]\n", TEST_PREFIX);
+	else
+		ksft_test_result_pass("%s: [PASS,test-unknown-flags]\n", TEST_PREFIX);
+	create.flags = 0;
+
 	/* should fail (not memfd) */
 	create.memfd  = 0; /* stdin */
 	create.offset = 0;
-- 
2.43.0


  reply	other threads:[~2026-07-01 17:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-01 17:21 [PATCH 0/1] udmabuf: reject unknown UDMABUF_CREATE flags Iván Ezequiel Rodriguez
2026-07-01 17:21 ` Iván Ezequiel Rodriguez [this message]
2026-07-01 17:39   ` [PATCH 1/1] " 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=20260701172159.270872-2-ivanrwcm25@gmail.com \
    --to=ivanrwcm25@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kraxel@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@lists.kernel.org \
    --cc=vivek.kasireddy@intel.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.