From: sashiko-bot@kernel.org
To: zhaoguohan@kylinos.cn
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 3/3] accel/ethosu: fix job completion fence cleanup
Date: Thu, 16 Jul 2026 08:39:22 +0000 [thread overview]
Message-ID: <20260716083923.0FABC1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260716082530.1023538-4-zhaoguohan@kylinos.cn>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but... If done_fence allocation fails in ethosu_ioctl_submit_job(), the error path jumps to out_cleanup_job and calls drm_sched_job_cleanup() on an uninitialized ejob->base, causing a kernel panic.
- [High] This problem wasn't introduced by this patch, but... The shared IRQ handler accesses hardware registers while the device might be runtime suspended, and the suspend callback lacks synchronize_irq().
--
--- Patch [3]: [PATCH 3/3] accel/ethosu: fix job completion fence cleanup ---
commit 985100a317b693007577d3f37217a236dddcfd49
Author: GuoHan Zhao <zhaoguohan@kylinos.cn>
accel/ethosu: fix job completion fence cleanup
Fixes a leak of the uninitialized done fence and a potential refcount
underflow in the job cleanup paths.
Link: https://sashiko.dev/#/patchset/20260716065219.931088-1-zhaoguohan@kylinos.cn?part=1
> diff --git a/drivers/accel/ethosu/ethosu_job.c b/drivers/accel/ethosu/ethosu_job.c
> --- a/drivers/accel/ethosu/ethosu_job.c
> +++ b/drivers/accel/ethosu/ethosu_job.c
> @@ -152,6 +152,13 @@ static void ethosu_job_err_cleanup(struct ethosu_job *job)
>
> drm_gem_object_put(job->cmd_bo);
>
> + if (job->done_fence) {
> + if (dma_fence_was_initialized(job->done_fence))
> + dma_fence_put(job->done_fence);
> + else
> + dma_fence_free(job->done_fence);
> + }
> +
> kfree(job);
> }
[ ... ]
[Severity: High]
This is a pre-existing issue, but can this cleanup path cause a NULL pointer
dereference during job submission?
If done_fence allocation fails in ethosu_ioctl_submit_job(), the code
jumps to out_cleanup_job before drm_sched_job_init() initializes
ejob->base:
ethosu_ioctl_submit_job() {
ejob->done_fence = kzalloc_obj(*ejob->done_fence);
if (!ejob->done_fence) {
ret = -ENOMEM;
goto out_cleanup_job;
}
...
out_cleanup_job:
if (ret)
drm_sched_job_cleanup(&ejob->base);
}
This unconditionally invokes drm_sched_job_cleanup() on the uninitialized
ejob->base, which will dereference job->s_fence:
drm_sched_job_cleanup() {
if (kref_read(&job->s_fence->finished.refcount)) {
...
}
Could this allow userspace to trigger a kernel panic by causing a memory
allocation failure?
[Severity: High]
This is a pre-existing issue, but does the IRQ handler safely access
hardware if the device is suspended?
The shared IRQ handler accesses hardware registers unconditionally:
ethosu_job_irq_handler() {
struct ethosu_device *dev = data;
u32 status = readl_relaxed(dev->regs + NPU_REG_STATUS);
...
}
Since the IRQ line is shared, another device might trigger the IRQ while
this device is in runtime suspend (clocks disabled). If the handler
accesses NPU_REG_STATUS without calling pm_runtime_get_if_active() to
check the PM state, could this cause a bus fault or invalid memory access?
Also, in ethosu_device_suspend(), the clocks are disabled without
calling synchronize_irq():
ethosu_device_suspend() {
clk_bulk_disable_unprepare(ethosudev->num_clks, ethosudev->clks);
...
}
Should synchronize_irq() be called here to ensure no IRQ handler is
mid-flight before powering down the hardware?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260716082530.1023538-1-zhaoguohan@kylinos.cn?part=3
prev parent reply other threads:[~2026-07-16 8:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-16 8:25 [PATCH 0/3] accel/ethosu: fix probe and job cleanup errors zhaoguohan
2026-07-16 8:25 ` [PATCH 1/3] accel/ethosu: clean up resources on probe failure zhaoguohan
2026-07-16 8:39 ` sashiko-bot
2026-07-16 8:25 ` [PATCH 2/3] accel/ethosu: propagate SRAM initialization errors zhaoguohan
2026-07-16 8:41 ` sashiko-bot
2026-07-16 8:25 ` [PATCH 3/3] accel/ethosu: fix job completion fence cleanup zhaoguohan
2026-07-16 8:39 ` sashiko-bot [this message]
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=20260716083923.0FABC1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=zhaoguohan@kylinos.cn \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox