From: sashiko-bot@kernel.org
To: "Zhiping Zhang" <zhipingz@meta.com>
Cc: kvm@vger.kernel.org, linux-pci@vger.kernel.org,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v6 4/5] vfio/pci: implement get_tph and DMA_BUF_TPH feature
Date: Tue, 09 Jun 2026 19:38:38 +0000 [thread overview]
Message-ID: <20260609193838.D337F1F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260608185646.4085127-5-zhipingz@meta.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Medium] Unconditional validation of the flag-gated `ph` parameter causes valid requests clearing metadata to be rejected.
- [Low] Mixing `goto`-based error handling with scope-based cleanup helpers (`scoped_guard`) in the same function.
- [Low] Unprotected read of `priv->vdev` races with concurrent write to `NULL`.
--
commit f7be31969e4c92a551932ef245b8d9697e571272
Author: Zhiping Zhang <zhipingz@meta.com>
vfio/pci: implement get_tph and DMA_BUF_TPH feature
This commit implements the dma-buf get_tph callback for vfio-pci-exported
dma-bufs. It also adds the VFIO_DEVICE_FEATURE_DMA_BUF_TPH feature to allow
userspace to attach TPH metadata to a dma-buf.
> diff --git a/drivers/vfio/pci/vfio_pci_dmabuf.c b/drivers/vfio/pci/vfio_pci_dmabuf.c
> index 1a177ce7de546..f1bc3733d3db5 100644
> --- a/drivers/vfio/pci/vfio_pci_dmabuf.c
> +++ b/drivers/vfio/pci/vfio_pci_dmabuf.c
[ ... ]
> @@ -327,12 +358,71 @@ int vfio_pci_core_feature_dma_buf(struct vfio_pci_core_device *vdev, u32 flags,
[ ... ]
> +int vfio_pci_core_feature_dma_buf_tph(struct vfio_pci_core_device *vdev,
> + u32 flags,
> + struct vfio_device_feature_dma_buf_tph __user *arg,
> + size_t argsz)
> +{
> + struct vfio_device_feature_dma_buf_tph set_tph;
> + struct vfio_pci_dma_buf *priv;
> + struct dma_buf *dmabuf;
> + int ret;
> +
> + if (!pcie_tph_supported(vdev->pdev))
> + return -EOPNOTSUPP;
> +
> + ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET,
> + sizeof(set_tph));
> + if (ret != 1)
> + return ret;
> +
> + if (copy_from_user(&set_tph, arg, sizeof(set_tph)))
> + return -EFAULT;
> +
> + if (set_tph.flags & ~(VFIO_DMA_BUF_TPH_ST | VFIO_DMA_BUF_TPH_ST_EXT))
> + return -EINVAL;
> +
> + /* PCIe TLP Processing Hint is a 2-bit field. */
> + if (set_tph.ph & ~0x3)
> + return -EINVAL;
[Severity: Medium]
Will this unconditionally reject requests clearing the metadata?
The documentation mentions that setting flags to 0 clears previously published
metadata. However, because this check is evaluated unconditionally, userspace
leaving the ph field uninitialized (containing stack garbage) when passing
flags = 0 will cause the kernel to erroneously reject a valid clear request
with -EINVAL.
Should this validation only occur if the relevant flags are set?
> +
> + dmabuf = dma_buf_get(set_tph.dmabuf_fd);
> + if (IS_ERR(dmabuf))
> + return PTR_ERR(dmabuf);
> +
> + if (dmabuf->ops != &vfio_pci_dmabuf_ops) {
> + ret = -EINVAL;
> + goto out_put;
> + }
> +
> + priv = dmabuf->priv;
> + if (priv->vdev != vdev) {
[Severity: Low]
Does this unprotected read of priv->vdev race with concurrent unbound operations?
In vfio_pci_dma_buf_cleanup(), there is a concurrent write setting
priv->vdev = NULL under the vdev->memory_lock semaphore.
Since this read occurs without locks, can it race with the concurrent write
and cause KCSAN warnings or load tearing? Would using READ_ONCE() here and
WRITE_ONCE() in vfio_pci_dma_buf_cleanup() help prevent this?
> + ret = -EINVAL;
> + goto out_put;
> + }
> +
> + scoped_guard(mutex, &priv->tph_lock) {
> + priv->tph_st = set_tph.steering_tag;
> + priv->tph_st_ext = set_tph.steering_tag_ext;
> + priv->tph_ph = set_tph.ph;
> + priv->tph_st_valid = !!(set_tph.flags & VFIO_DMA_BUF_TPH_ST);
> + priv->tph_st_ext_valid =
> + !!(set_tph.flags & VFIO_DMA_BUF_TPH_ST_EXT);
> + }
> + ret = 0;
> +
> +out_put:
[Severity: Low]
Is it okay to mix goto-based error handling and scope-based cleanup helpers in
this function?
The kernel cleanup guidelines discourage mixing goto labels for cleanup (like
goto out_put here) and scoped_guard() in the same function to avoid confusing
ownership semantics.
Would it be better to either use a __free() wrapper for the dmabuf or stick to
traditional mutex_lock()/mutex_unlock() here?
> + dma_buf_put(dmabuf);
> + return ret;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260608185646.4085127-1-zhipingz@meta.com?part=4
next prev parent reply other threads:[~2026-06-09 19:38 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-08 18:56 [PATCH v6 0/5] vfio/dma-buf: add TPH support for peer-to-peer access Zhiping Zhang
2026-06-08 18:56 ` [PATCH v6 1/5] net/mlx5: free mlx5_st_idx_data on final dealloc Zhiping Zhang
2026-06-08 18:56 ` [PATCH v6 2/5] PCI/TPH: expose enabled requester type and capability helpers Zhiping Zhang
2026-06-09 19:56 ` Bjorn Helgaas
2026-06-09 23:38 ` Zhiping Zhang
2026-06-08 18:56 ` [PATCH v6 3/5] dma-buf: add optional get_tph() callback Zhiping Zhang
2026-06-09 8:10 ` Christian König
2026-06-09 14:38 ` Zhiping Zhang
2026-06-09 19:38 ` sashiko-bot
2026-06-08 18:56 ` [PATCH v6 4/5] vfio/pci: implement get_tph and DMA_BUF_TPH feature Zhiping Zhang
2026-06-09 8:12 ` Christian König
2026-06-09 14:39 ` Zhiping Zhang
2026-06-09 19:38 ` sashiko-bot [this message]
2026-06-09 21:46 ` Alex Williamson
2026-06-09 23:48 ` Zhiping Zhang
2026-06-08 18:56 ` [PATCH v6 5/5] RDMA/mlx5: get tph for p2p access when registering dma-buf mr Zhiping Zhang
2026-06-09 19:38 ` 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=20260609193838.D337F1F00893@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=kvm@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=zhipingz@meta.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.