From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: Baineng Shou <shoubaineng@gmail.com>,
Sumit Semwal <sumit.semwal@linaro.org>,
"T . J . Mercier" <tjmercier@google.com>,
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
Brian Starkey <Brian.Starkey@arm.com>,
John Stultz <jstultz@google.com>,
Sandeep Patil <sspatil@android.com>,
"Andrew F . Davis" <afd@ti.com>,
Srinivas Kandagatla <srini@kernel.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
linaro-mm-sig@lists.linaro.org, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH v7 0/4] dma-buf: fix fd leak when copy_to_user() fails after fd_install()
Date: Mon, 24 Aug 2026 14:42:44 +0200 [thread overview]
Message-ID: <b7e18a9b-2c1b-43b1-b62d-afca4659b4dd@gmail.com> (raw)
In-Reply-To: <20260817050457.1005285-1-shoubaineng@gmail.com>
I've gone ahead, added one more rb and pushed the result to drm-misc-fixes.
Thanks for the help,
Christian.
On 8/17/26 07:04, Baineng Shou wrote:
> Several drivers call dma_buf_fd() — which internally calls fd_install()
> — before copy_to_user() returns the fd number to userspace. If
> copy_to_user() fails, the fd is already published in the caller's fd
> table but the ioctl returns an error, so userspace never learns the fd
> number. Worse, the window between fd_install() and copy_to_user()
> allows other threads to observe and manipulate the fd (dup, close,
> SCM_RIGHTS), making any "close it on the failure path" fix unsafe.
>
> The fix is to split the allocation into three steps: reserve an fd with
> get_unused_fd_flags() (not yet visible to other threads), do
> copy_to_user(), and only then publish the fd with fd_install() via the
> new dma_buf_fd_install() helper. On copy_to_user() failure,
> put_unused_fd() + dma_buf_put() cleanly unwind with no user-visible
> side effects.
>
> Patch 1 introduces dma_buf_fd_install() in dma-buf.c (wrapping
> fd_install() together with the DMA_BUF_TRACE call to preserve export
> tracing) and applies the fix to dma-heap.
>
> Patch 2 applies the same fix to fastrpc, which even had a comment
> acknowledging the problem could not be fixed before.
>
> Patch 3 replaces the bare fd_install() in drm_gem_prime_handle_to_fd()
> with dma_buf_fd_install() to restore tracepoint coverage for DRM PRIME
> exports (suggested by Christian König).
>
> Patch 4 adds a selftest to tools/testing/selftests/dmabuf-heaps/ that
> reproduces the fd-leak scenario (mprotect flip before the ioctl) and
> verifies the fd count is unchanged after a failed ioctl (suggested by
> Sumit Semwal).
>
> v1: https://lore.kernel.org/dri-devel/20260703080922.1838362-1-shoubaineng@gmail.com/
> v2: https://lore.kernel.org/dri-devel/20260710105740.3080070-1-shoubaineng@gmail.com/
> v3: https://lore.kernel.org/dri-devel/20260714114654.3885457-1-shoubaineng@gmail.com/
> v5: https://lore.kernel.org/dri-devel/20260730062645.233148-1-shoubaineng@gmail.com/
> v6: https://lore.kernel.org/dri-devel/20260807101140.1357218-1-shoubaineng@gmail.com/
>
> Changes in v7:
> - Add Reviewed-by: T.J. Mercier to patch 4 (selftest).
> - Add Acked-by: Sumit Semwal to the whole series.
>
> Changes in v6:
> - Rework the selftest (patch 4) per review: extract a count_open_fds()
> helper, fix the copy_from_user() comment, fail (not skip) when the
> ioctl does not return -1, drop the bogus mprotect-race mention, and
> reword the result message.
>
> Changes in v5:
> - Add selftest (patch 4) reproducing the fd-leak scenario (Sumit Semwal)
>
> Changes in v4:
> - Add patch 3: drm/prime: use dma_buf_fd_install() (Christian König)
> - Add Acked-by: Christian König to patches 1 and 2
>
> Changes in v3:
> - Split into two patches (dma-heap + fastrpc separately)
> - Add dma_buf_fd_install() to preserve trace_dma_buf_fd tracepoint
> - Add fastrpc fix using the new helper (T.J. Mercier)
>
> Baineng Shou (4):
> dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds
> misc: fastrpc: don't publish fd before copy_to_user() succeeds
> drm/prime: use dma_buf_fd_install() to preserve export tracing
> selftests: dmabuf-heaps: add fd-leak-on-EFAULT regression test
>
> drivers/dma-buf/dma-buf.c | 20 ++++
> drivers/dma-buf/dma-heap.c | 80 ++++++-------
> drivers/gpu/drm/drm_prime.c | 2 +-
> drivers/misc/fastrpc.c | 16 +--
> include/linux/dma-buf.h | 1 +
> .../selftests/dmabuf-heaps/dmabuf-heap.c | 113 +++++++++++++++++-
> 6 files changed, 180 insertions(+), 52 deletions(-)
>
next prev parent reply other threads:[~2026-08-24 12:42 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-03 8:09 [PATCH] dma-buf: dma-heap: close installed fd when copy_to_user() fails Baineng Shou
2026-07-03 8:17 ` sashiko-bot
2026-07-03 8:26 ` Christian König
2026-07-10 10:57 ` [PATCH v2] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-07-10 11:06 ` sashiko-bot
2026-07-10 20:20 ` T.J. Mercier
2026-07-11 4:18 ` 寿柏能
2026-07-13 23:33 ` T.J. Mercier
2026-07-14 11:46 ` [PATCH v3 0/2] dma-buf: fix fd leak when copy_to_user() fails after fd_install() Baineng Shou
2026-07-14 11:46 ` [PATCH v3 1/2] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-07-14 13:13 ` David Laight
2026-07-14 13:38 ` 寿柏能
2026-07-14 14:33 ` David Laight
2026-07-15 2:04 ` 寿柏能
[not found] ` <CAGCp47zxaZsoBKeXz2YdyxbX8QOy_g8dGwnC9gVpJ-Sqng48Qg@mail.gmail.com>
2026-07-28 6:35 ` Sumit Semwal
2026-07-30 6:25 ` [PATCH v5 0/4] dma-buf: fix fd leak when copy_to_user() fails after fd_install() Baineng Shou
2026-07-30 6:25 ` [PATCH v5 1/4] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-07-30 6:25 ` [PATCH v5 2/4] misc: fastrpc: " Baineng Shou
2026-07-30 6:26 ` [PATCH v5 0/4] dma-buf: fix fd leak when copy_to_user() fails after fd_install() Baineng Shou
2026-07-30 6:26 ` [PATCH v5 1/4] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-07-30 6:26 ` [PATCH v5 2/4] misc: fastrpc: " Baineng Shou
2026-07-30 6:26 ` [PATCH v5 3/4] drm/prime: use dma_buf_fd_install() to preserve export tracing Baineng Shou
2026-07-30 6:40 ` sashiko-bot
2026-07-31 17:14 ` T.J. Mercier
2026-08-07 10:09 ` [PATCH v6 0/4] dma-buf: fix fd leak when copy_to_user() fails after fd_install() Baineng Shou
2026-08-07 10:10 ` Baineng Shou
2026-08-07 10:10 ` [PATCH v6 1/4] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-08-07 10:10 ` [PATCH v6 0/4] dma-buf: fix fd leak when copy_to_user() fails after fd_install() Baineng Shou
2026-08-07 10:11 ` Baineng Shou
2026-08-07 10:11 ` Baineng Shou
2026-08-07 10:11 ` [PATCH v6 1/4] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-08-07 10:11 ` [PATCH v6 2/4] misc: fastrpc: " Baineng Shou
2026-08-07 10:11 ` [PATCH v6 3/4] drm/prime: use dma_buf_fd_install() to preserve export tracing Baineng Shou
2026-08-07 10:22 ` sashiko-bot
2026-08-07 10:11 ` [PATCH v6 4/4] selftests: dmabuf-heaps: add fd-leak-on-EFAULT regression test Baineng Shou
2026-08-07 10:20 ` sashiko-bot
2026-08-07 21:49 ` T.J. Mercier
2026-08-12 15:27 ` [PATCH v6 0/4] dma-buf: fix fd leak when copy_to_user() fails after fd_install() Sumit Semwal
2026-08-17 5:04 ` [PATCH v7 " Baineng Shou
2026-08-17 5:04 ` [PATCH v7 1/4] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-08-17 5:04 ` [PATCH v7 2/4] misc: fastrpc: " Baineng Shou
2026-08-17 5:20 ` sashiko-bot
2026-08-17 5:04 ` [PATCH v7 3/4] drm/prime: use dma_buf_fd_install() to preserve export tracing Baineng Shou
2026-08-17 5:14 ` sashiko-bot
2026-08-17 5:04 ` [PATCH v7 4/4] selftests: dmabuf-heaps: add fd-leak-on-EFAULT regression test Baineng Shou
2026-08-17 5:14 ` sashiko-bot
2026-08-24 12:42 ` Christian König [this message]
2026-07-30 6:26 ` [PATCH v5 " Baineng Shou
2026-07-30 6:38 ` sashiko-bot
2026-07-31 17:09 ` T.J. Mercier
2026-07-14 11:46 ` [PATCH v3 2/2] misc: fastrpc: don't publish fd before copy_to_user() succeeds Baineng Shou
2026-07-14 12:08 ` sashiko-bot
2026-07-15 20:44 ` T.J. Mercier
2026-07-14 12:24 ` [PATCH v3 0/2] dma-buf: fix fd leak when copy_to_user() fails after fd_install() Christian König
2026-07-14 13:27 ` [PATCH v3] drm/prime: use dma_buf_fd_install() to preserve export tracing Baineng Shou
2026-07-14 13:45 ` sashiko-bot
2026-07-10 12:33 ` [PATCH v2] dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds Christian König
2026-07-11 4:14 ` Baineng Shou
2026-07-11 4:29 ` 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=b7e18a9b-2c1b-43b1-b62d-afca4659b4dd@gmail.com \
--to=ckoenig.leichtzumerken@gmail.com \
--cc=Brian.Starkey@arm.com \
--cc=afd@ti.com \
--cc=airlied@gmail.com \
--cc=benjamin.gaignard@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jstultz@google.com \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=shoubaineng@gmail.com \
--cc=simona@ffwll.ch \
--cc=srini@kernel.org \
--cc=sspatil@android.com \
--cc=sumit.semwal@linaro.org \
--cc=tjmercier@google.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.