From: sashiko-bot@kernel.org
To: "Matt Evans" <matt@ozlabs.org>
Cc: dri-devel@lists.freedesktop.org, kvm@vger.kernel.org,
linux-pci@vger.kernel.org
Subject: Re: [PATCH v5 1/9] PCI/P2PDMA: Split pool-related cleanup out of pci_p2pdma_release()
Date: Wed, 15 Jul 2026 18:05:20 +0000 [thread overview]
Message-ID: <20260715180521.3CDD61F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260715174737.15287-2-matt@ozlabs.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Skipping `synchronize_rcu()` when `p2pdma->pool` is NULL causes a Use-After-Free of the devres-managed `pci_p2pdma` structure and its `map_types` xarray for concurrent RCU readers.
--
--- Patch [1]: [PATCH v5 1/9] PCI/P2PDMA: Split pool-related cleanup out of pci_p2pdma_release() ---
commit d0b08915340cc1e9c83ccd0a7d506d8fb8505da6
Author: Matt Evans <matt@ozlabs.org>
PCI/P2PDMA: Split pool-related cleanup out of pci_p2pdma_release()
This patch splits the pool-related release code into a new
pci_p2pdma_release_pool() function. This prepares for future compile-time
selection of a null implementation during planned refactoring.
> diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
> index b2d5266f86530..498bca2574193 100644
> --- a/drivers/pci/p2pdma.c
> +++ b/drivers/pci/p2pdma.c
[ ... ]
> @@ -226,6 +226,17 @@ static const struct dev_pagemap_ops p2pdma_pgmap_ops = {
> .folio_free = p2pdma_folio_free,
> };
>
> +static void pci_p2pdma_release_pool(struct pci_dev *pdev,
> + struct pci_p2pdma *p2pdma)
> +{
> + if (!p2pdma->pool)
> + return;
> +
> + synchronize_rcu();
[Severity: High]
This is a pre-existing issue, but does skipping synchronize_rcu() here when
the pool is empty cause a use-after-free for concurrent RCU readers?
If a driver initializes P2P DMA but does not add resources, the pool
remains uninitialized. When the driver unbinds, devres cleanup triggers
pci_p2pdma_release(), which clears pdev->p2pdma and then calls this helper.
Since the pool is missing, the early return entirely bypasses the RCU grace
period. When pci_p2pdma_release() finishes, devres immediately frees the
pci_p2pdma structure.
Concurrently, another thread executing pci_p2pdma_map_type() might take the
RCU read lock, dereference the old pdev->p2pdma pointer, and access the
freed memory via the map_types xarray.
Moving synchronize_rcu() into this pool-specific helper seems to imply that
the grace period only protects the pool, when it actually protects the
overall pci_p2pdma structure. Should synchronize_rcu() be moved back out to
pci_p2pdma_release() so it executes unconditionally?
> + gen_pool_destroy(p2pdma->pool);
> + sysfs_remove_group(&pdev->dev.kobj, &p2pmem_group);
> +}
> +
> static void pci_p2pdma_release(void *data)
> {
> struct pci_dev *pdev = data;
> @@ -237,15 +248,8 @@ static void pci_p2pdma_release(void *data)
>
> /* Flush and disable pci_alloc_p2p_mem() */
> pdev->p2pdma = NULL;
> - if (p2pdma->pool)
> - synchronize_rcu();
> + pci_p2pdma_release_pool(pdev, p2pdma);
> xa_destroy(&p2pdma->map_types);
> -
> - if (!p2pdma->pool)
> - return;
> -
> - gen_pool_destroy(p2pdma->pool);
> - sysfs_remove_group(&pdev->dev.kobj, &p2pmem_group);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260715174737.15287-1-matt@ozlabs.org?part=1
next prev parent reply other threads:[~2026-07-15 18:05 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-15 17:47 [PATCH v5 0/9] vfio/pci: Add mmap() for DMABUFs Matt Evans
2026-07-15 17:47 ` [PATCH v5 1/9] PCI/P2PDMA: Split pool-related cleanup out of pci_p2pdma_release() Matt Evans
2026-07-15 18:05 ` sashiko-bot [this message]
2026-07-15 17:47 ` [PATCH v5 2/9] PCI/P2PDMA: Add CONFIG_PCI_P2PDMA_CORE Matt Evans
2026-07-15 18:03 ` sashiko-bot
2026-07-15 17:47 ` [PATCH v5 3/9] vfio/pci: Add a helper to look up PFNs for DMABUFs Matt Evans
2026-07-15 18:08 ` sashiko-bot
2026-07-15 17:47 ` [PATCH v5 4/9] vfio/pci: Add a helper to create a DMABUF for a BAR-map VMA Matt Evans
2026-07-15 18:12 ` sashiko-bot
2026-07-15 17:47 ` [PATCH v5 5/9] vfio/pci: Convert BAR mmap() to use a DMABUF Matt Evans
2026-07-15 18:13 ` sashiko-bot
2026-07-15 17:47 ` [PATCH v5 6/9] vfio/pci: Provide a user-facing name for BAR mappings Matt Evans
2026-07-15 18:01 ` sashiko-bot
2026-07-15 17:47 ` [PATCH v5 7/9] vfio/pci: Clean up BAR zap and revocation Matt Evans
2026-07-15 18:00 ` sashiko-bot
2026-07-15 17:47 ` [PATCH v5 8/9] vfio/pci: Support mmap() of a VFIO DMABUF Matt Evans
2026-07-15 18:17 ` sashiko-bot
2026-07-15 17:47 ` [PATCH v5 9/9] vfio/pci: Permanently revoke a DMABUF on request Matt Evans
2026-07-15 18:11 ` sashiko-bot
2026-07-15 18:12 ` [PATCH v5 0/9] vfio/pci: Add mmap() for DMABUFs David Matlack
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=20260715180521.3CDD61F00A3A@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=matt@ozlabs.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 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.