Re: [PATCH v2 03/12] arm64: dts: imx8qm-mek: fix dsp reserved memory node names for remoteproc

[email protected] Wed, 29 Jul 2026 13:20:30 +0000
Newsgroups dev.linux.lists.imx,org.kernel.vger.linux-devicetree
Message-ID <[email protected]>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] Missing cancellation of `rproc_work` leads to Use-After-Free on driver unbind.
--

--- Patch [3]: [PATCH v2 03/12] arm64: dts: imx8qm-mek: fix dsp reserved memory node names for remoteproc ---
commit ccca82516c9f0cb91d5a0dd4d02b6d18ce2a6c7e
Author: Peng Fan <[email protected]>

arm64: dts: imx8qm-mek: fix dsp reserved memory node names for remoteproc

The imx_dsp_rproc driver checks for the name "vdev0buffer" to skip
mapping the vdev buffer region, as it is handled by
rproc_add_virtio_dev. With the node named "memory", the check fails
and the region gets unnecessarily mapped.

Rename the DSP reserved memory nodes to use proper names for
consistency with other remoteproc reserved memory regions and to
ensure the vdev0buffer check works correctly.

Rename the DSP reserved memory nodes to use the expected names so
the driver can correctly identify and handle each region.

Fixes: d0ee7ae8ce26 ("arm64: dts: imx8qm-mek: enable dsp node for rproc usage")
Signed-off-by: Peng Fan <[email protected]>

> diff --git a/arch/arm64/boot/dts/freescale/imx8qm-mek.dts b/arch/arm64/boot/dts/freescale/imx8qm-mek.dts
> index 8b67fb5d670da..1afa65bd955ec 100644
> --- a/arch/arm64/boot/dts/freescale/imx8qm-mek.dts
> +++ b/arch/arm64/boot/dts/freescale/imx8qm-mek.dts
[ ... ]
> -		dsp_vdev0buffer: memory@94300000 {
> +		dsp_vdev0buffer: vdev0buffer@94300000 {
>  			compatible = "shared-dma-pool";
>  			reg = <0 0x94300000 0 0x100000>;
>  			no-map;

[Severity: High]
This isn't a bug introduced by this patch, but is there a missing cancellation
of rproc_work in the imx_dsp_rproc driver that could lead to a use-after-free
on driver unbind?

In drivers/remoteproc/imx_dsp_rproc.c:imx_dsp_rproc_probe():

	INIT_WORK(&priv->rproc_work, imx_dsp_rproc_vq_work);

And later in imx_dsp_rproc_rx_tx_callback(), the work is scheduled:

	default:
		schedule_work(&priv->rproc_work);
		break;

Because the driver does not define a remove callback and relies entirely on
devres cleanup, the work is never explicitly cancelled (e.g., via
cancel_work_sync()).

During driver unbind, devm_rproc_alloc teardown will free the rproc structure,
along with its embedded priv. If the scheduled work executes concurrently or is
pending on the system workqueue, it will access the freed priv->rproc, leading
to a use-after-free.

Could a devres action be added to properly flush and destroy this workqueue
before the rproc is freed?

-- 
Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=3