From: sashiko-bot@kernel.org
To: "Ian Rogers" <irogers@google.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>, "Kees Cook" <kees@kernel.org>,
"Nathan Chancellor" <nathan@kernel.org>
Cc: "Nick Desaulniers" <ndesaulniers@google.com>,
"Bill Wendling" <morbo@google.com>,
"Justin Stitt" <justinstitt@google.com>,
"Jonathan Corbet" <corbet@lwn.net>,
"Madhavan Srinivasan" <maddy@linux.ibm.com>,
"Michael Ellerman" <mpe@ellerman.id.au>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Christophe Leroy" <chleroy@kernel.org>,
"Nayna Jain" <nayna@linux.ibm.com>,
"Yoshinori Sato" <ysato@users.sourceforge.jp>,
"Rich Felker" <dalias@libc.org>,
"John Paul Adrian Glaubitz" <glaubitz@physik.fu-berlin.de>,
"Viresh Kumar" <viresh.kumar@linaro.org>,
"David Teigland" <teigland@redhat.com>,
"Alexander Aring" <aahringo@redhat.com>,
"Juergen Gross" <jgross@suse.com>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Oleksandr Tyshchenko" <oleksandr_tyshchenko@epam.com>,
"Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Sven Schnelle" <svens@linux.ibm.com>,
"Richard Weinberger" <richard@nod.at>,
"Zhihao Cheng" <chengzhihao1@huawei.com>,
"Felix Kuehling" <Felix.Kuehling@amd.com>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>,
linux-s390@vger.kernel.org, linux-mtd@lists.infradead.org,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 11/11] kobject: Require explicit initialization of struct kobj_type::release
Date: Tue, 13 Oct 2026 22:56:49 +0000 [thread overview]
Message-ID: <sashiko-outbox-170611@kernel.org> (raw)
In-Reply-To: <20261013223946.1836757-12-irogers@google.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] sysfs: Use-After-Free in kobject delayed release via devm/memset
- [Low] sysfs: incorrect documentation for dss_overlay_kobj_uninit() cleanup
--
commit 25c0a8c68e5a115989252d41a0d4731867415d79
Author: Ian Rogers <irogers@google.com>
Subject: kobject: Require explicit initialization of struct kobj_type::release
Annotate struct kobj_type::release with __require_explicit_initialization
so the compiler diagnoses any struct kobj_type initializer that omits
.release. For the remaining legacy struct kobj_type definitions where the
kobject is static, per-CPU, or embedded inside a devm- or parent-managed
structure rather than freed by kobject_put(), explicitly initialize
.release = NULL.
Link: https://lpc.events/event/20/contributions/2392/
> diff --git a/drivers/dma/ioat/sysfs.c b/drivers/dma/ioat/sysfs.c
> index e796ddb5383f8..7fdd0ca36b98a 100644
> --- a/drivers/dma/ioat/sysfs.c
> +++ b/drivers/dma/ioat/sysfs.c
> @@ -167,6 +167,8 @@ static const struct attribute *const ioat_attrs[] = {
> ATTRIBUTE_GROUPS(ioat);
>
> const struct kobj_type ioat_ktype = {
> + /* ioatdma_chan is allocated via devm_kzalloc() rather than freed by kobject_put(). */
> + .release = NULL,
[Severity: High]
Does this setup cause a use-after-free when CONFIG_DEBUG_KOBJECT_RELEASE is
enabled?
When kobject_put() is called, it queues a delayed_work to execute
kobject_cleanup() later. Because the struct is managed by devm_kzalloc(),
the memory is freed immediately after unbind, leaving an active delayed_work
pointing to the freed memory.
[ ... ]
> diff --git a/drivers/soc/hisilicon/kunpeng_hccs.c b/drivers/soc/hisilicon/kunpeng_hccs.c
> index 0cc2953d59a54..5d083d2b72caa 100644
> --- a/drivers/soc/hisilicon/kunpeng_hccs.c
> +++ b/drivers/soc/hisilicon/kunpeng_hccs.c
> @@ -1038,6 +1038,8 @@ static struct attribute *hccs_port_default_attrs[] = {
> ATTRIBUTE_GROUPS(hccs_port_default);
>
> static const struct kobj_type hccs_port_type = {
> + /* hccs_port_info is allocated via devm_kcalloc() rather than freed by kobject_put(). */
> + .release = NULL,
[Severity: High]
Can this devm allocation cause a use-after-free for the delayed_work?
Similar to the ioat_ktype case, the devm_kcalloc allocation means the struct
containing the kobject is freed upon driver unbind immediately after
kobject_put() executes, leaving a pending delayed_work on freed memory.
[ ... ]
> diff --git a/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c b/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c
> index ae937854403b1..3d787245f5b51 100644
> --- a/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c
> +++ b/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c
> @@ -304,6 +304,8 @@ static const struct sysfs_ops display_sysfs_ops = {
> };
>
> static struct kobj_type display_ktype = {
> + /* dssdev->kobj is embedded in struct omap_dss_device and zeroed in display_uninit_sysfs(). */
> + .release = NULL,
[Severity: High]
Does this zeroing pattern corrupt the active workqueue when
CONFIG_DEBUG_KOBJECT_RELEASE is enabled?
Looking at display_uninit_sysfs(), the code calls kobject_put() followed
immediately by memset:
void display_uninit_sysfs(struct omap_dss_device *dssdev)
{
...
kobject_del(&dssdev->kobj);
kobject_put(&dssdev->kobj);
memset(&dssdev->kobj, 0, sizeof(dssdev->kobj));
}
Since kobject_put() schedules a delayed_work, wouldn't the memset
synchronously destroy the active work struct before it can run?
[ ... ]
> diff --git a/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c b/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c
> index 1da4fb1c77b4a..9aa16b3dee5ef 100644
> --- a/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c
> +++ b/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c
> @@ -429,6 +429,8 @@ static const struct sysfs_ops overlay_sysfs_ops = {
> };
>
> static struct kobj_type overlay_ktype = {
> + /* ovl->kobj is embedded in static overlays[]; dss_overlay_kobj_uninit() only calls kobject_del(). */
> + .release = NULL,
[Severity: Low]
Is this comment accurate?
Looking at dss_overlay_kobj_uninit() in the same file:
void dss_overlay_kobj_uninit(struct omap_overlay *ovl)
{
kobject_del(&ovl->kobj);
kobject_put(&ovl->kobj);
}
The implementation contradicts the comment by explicitly calling
kobject_put().
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261013223946.1836757-1-irogers@google.com?part=11
WARNING: multiple messages have this Message-ID (diff)
From: sashiko-bot@kernel.org
To: "Ian Rogers" <irogers@google.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>, "Kees Cook" <kees@kernel.org>,
"Nathan Chancellor" <nathan@kernel.org>
Cc: "Nick Desaulniers" <ndesaulniers@google.com>,
"Bill Wendling" <morbo@google.com>,
"Justin Stitt" <justinstitt@google.com>,
"Jonathan Corbet" <corbet@lwn.net>,
"Madhavan Srinivasan" <maddy@linux.ibm.com>,
"Michael Ellerman" <mpe@ellerman.id.au>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Christophe Leroy" <chleroy@kernel.org>,
"Nayna Jain" <nayna@linux.ibm.com>,
"Yoshinori Sato" <ysato@users.sourceforge.jp>,
"Rich Felker" <dalias@libc.org>,
"John Paul Adrian Glaubitz" <glaubitz@physik.fu-berlin.de>,
"Viresh Kumar" <viresh.kumar@linaro.org>,
"David Teigland" <teigland@redhat.com>,
"Alexander Aring" <aahringo@redhat.com>,
"Juergen Gross" <jgross@suse.com>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Oleksandr Tyshchenko" <oleksandr_tyshchenko@epam.com>,
"Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Sven Schnelle" <svens@linux.ibm.com>,
"Richard Weinberger" <richard@nod.at>,
"Zhihao Cheng" <chengzhihao1@huawei.com>,
"Felix Kuehling" <Felix.Kuehling@amd.com>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>,
linux-s390@vger.kernel.org, linux-mtd@lists.infradead.org,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 11/11] kobject: Require explicit initialization of struct kobj_type::release
Date: Tue, 13 Oct 2026 22:56:49 +0000 [thread overview]
Message-ID: <sashiko-outbox-170611@kernel.org> (raw)
In-Reply-To: <20261013223946.1836757-12-irogers@google.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] sysfs: Use-After-Free in kobject delayed release via devm/memset
- [Low] sysfs: incorrect documentation for dss_overlay_kobj_uninit() cleanup
--
commit 25c0a8c68e5a115989252d41a0d4731867415d79
Author: Ian Rogers <irogers@google.com>
Subject: kobject: Require explicit initialization of struct kobj_type::release
Annotate struct kobj_type::release with __require_explicit_initialization
so the compiler diagnoses any struct kobj_type initializer that omits
.release. For the remaining legacy struct kobj_type definitions where the
kobject is static, per-CPU, or embedded inside a devm- or parent-managed
structure rather than freed by kobject_put(), explicitly initialize
.release = NULL.
Link: https://lpc.events/event/20/contributions/2392/
> diff --git a/drivers/dma/ioat/sysfs.c b/drivers/dma/ioat/sysfs.c
> index e796ddb5383f8..7fdd0ca36b98a 100644
> --- a/drivers/dma/ioat/sysfs.c
> +++ b/drivers/dma/ioat/sysfs.c
> @@ -167,6 +167,8 @@ static const struct attribute *const ioat_attrs[] = {
> ATTRIBUTE_GROUPS(ioat);
>
> const struct kobj_type ioat_ktype = {
> + /* ioatdma_chan is allocated via devm_kzalloc() rather than freed by kobject_put(). */
> + .release = NULL,
[Severity: High]
Does this setup cause a use-after-free when CONFIG_DEBUG_KOBJECT_RELEASE is
enabled?
When kobject_put() is called, it queues a delayed_work to execute
kobject_cleanup() later. Because the struct is managed by devm_kzalloc(),
the memory is freed immediately after unbind, leaving an active delayed_work
pointing to the freed memory.
[ ... ]
> diff --git a/drivers/soc/hisilicon/kunpeng_hccs.c b/drivers/soc/hisilicon/kunpeng_hccs.c
> index 0cc2953d59a54..5d083d2b72caa 100644
> --- a/drivers/soc/hisilicon/kunpeng_hccs.c
> +++ b/drivers/soc/hisilicon/kunpeng_hccs.c
> @@ -1038,6 +1038,8 @@ static struct attribute *hccs_port_default_attrs[] = {
> ATTRIBUTE_GROUPS(hccs_port_default);
>
> static const struct kobj_type hccs_port_type = {
> + /* hccs_port_info is allocated via devm_kcalloc() rather than freed by kobject_put(). */
> + .release = NULL,
[Severity: High]
Can this devm allocation cause a use-after-free for the delayed_work?
Similar to the ioat_ktype case, the devm_kcalloc allocation means the struct
containing the kobject is freed upon driver unbind immediately after
kobject_put() executes, leaving a pending delayed_work on freed memory.
[ ... ]
> diff --git a/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c b/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c
> index ae937854403b1..3d787245f5b51 100644
> --- a/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c
> +++ b/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c
> @@ -304,6 +304,8 @@ static const struct sysfs_ops display_sysfs_ops = {
> };
>
> static struct kobj_type display_ktype = {
> + /* dssdev->kobj is embedded in struct omap_dss_device and zeroed in display_uninit_sysfs(). */
> + .release = NULL,
[Severity: High]
Does this zeroing pattern corrupt the active workqueue when
CONFIG_DEBUG_KOBJECT_RELEASE is enabled?
Looking at display_uninit_sysfs(), the code calls kobject_put() followed
immediately by memset:
void display_uninit_sysfs(struct omap_dss_device *dssdev)
{
...
kobject_del(&dssdev->kobj);
kobject_put(&dssdev->kobj);
memset(&dssdev->kobj, 0, sizeof(dssdev->kobj));
}
Since kobject_put() schedules a delayed_work, wouldn't the memset
synchronously destroy the active work struct before it can run?
[ ... ]
> diff --git a/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c b/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c
> index 1da4fb1c77b4a..9aa16b3dee5ef 100644
> --- a/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c
> +++ b/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c
> @@ -429,6 +429,8 @@ static const struct sysfs_ops overlay_sysfs_ops = {
> };
>
> static struct kobj_type overlay_ktype = {
> + /* ovl->kobj is embedded in static overlays[]; dss_overlay_kobj_uninit() only calls kobject_del(). */
> + .release = NULL,
[Severity: Low]
Is this comment accurate?
Looking at dss_overlay_kobj_uninit() in the same file:
void dss_overlay_kobj_uninit(struct omap_overlay *ovl)
{
kobject_del(&ovl->kobj);
kobject_put(&ovl->kobj);
}
The implementation contradicts the comment by explicitly calling
kobject_put().
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261013223946.1836757-1-irogers@google.com?part=11
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2026-10-13 22:56 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 22:39 [PATCH 00/11] kobject: Require explicit initialization of struct kobj_type::release Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:39 ` [PATCH 01/11] Compiler Attributes: Add __require_explicit_initialization macro Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:48 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 02/11] powerpc/secvar: Add missing kobject release callback to secvar_ktype Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:47 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 03/11] sh: sq: Add missing kobject release callback to ktype_percpu_entry Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:53 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 04/11] cpufreq: Initialize kobj_type release callback in ondemand and conservative governors Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:52 ` sashiko-bot
2026-10-14 4:24 ` Zhongqiu Han
2026-10-14 4:24 ` Zhongqiu Han
2026-10-13 22:39 ` [PATCH 05/11] ACPI: CPPC: Free cpc_desc in kobject release callback Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:54 ` sashiko-bot
2026-10-13 22:54 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 06/11] dlm: Free dlm_ls " Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:55 ` sashiko-bot
2026-10-13 22:55 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 07/11] xen/sys-hypervisor: Add release callback to hyp_sysfs_kobj_type Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:52 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 08/11] s390/sclp_mem: Allocate struct sclp_mem dynamically and add kobject release Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:48 ` sashiko-bot
2026-10-13 22:48 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 09/11] ubifs: sysfs: Use kset_create_and_add() for ubifs_kset Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:47 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 10/11] drm/amdkfd: Free queue in procfs_queue_type kobject release callback Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:57 ` sashiko-bot
2026-10-13 22:57 ` sashiko-bot
2026-10-13 22:39 ` [PATCH 11/11] kobject: Require explicit initialization of struct kobj_type::release Ian Rogers
2026-10-13 22:39 ` Ian Rogers
2026-10-13 22:56 ` sashiko-bot [this message]
2026-10-13 22:56 ` sashiko-bot
2026-10-14 5:36 ` [PATCH 00/11] " Greg Kroah-Hartman
2026-10-14 5:36 ` Greg Kroah-Hartman
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=sashiko-outbox-170611@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=Felix.Kuehling@amd.com \
--cc=aahringo@redhat.com \
--cc=agordeev@linux.ibm.com \
--cc=alexander.deucher@amd.com \
--cc=borntraeger@linux.ibm.com \
--cc=chengzhihao1@huawei.com \
--cc=chleroy@kernel.org \
--cc=christian.koenig@amd.com \
--cc=corbet@lwn.net \
--cc=dakr@kernel.org \
--cc=dalias@libc.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=glaubitz@physik.fu-berlin.de \
--cc=gor@linux.ibm.com \
--cc=gregkh@linuxfoundation.org \
--cc=hca@linux.ibm.com \
--cc=irogers@google.com \
--cc=jgross@suse.com \
--cc=justinstitt@google.com \
--cc=kees@kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=maddy@linux.ibm.com \
--cc=morbo@google.com \
--cc=mpe@ellerman.id.au \
--cc=nathan@kernel.org \
--cc=nayna@linux.ibm.com \
--cc=ndesaulniers@google.com \
--cc=npiggin@gmail.com \
--cc=ojeda@kernel.org \
--cc=oleksandr_tyshchenko@epam.com \
--cc=rafael@kernel.org \
--cc=richard@nod.at \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sstabellini@kernel.org \
--cc=svens@linux.ibm.com \
--cc=teigland@redhat.com \
--cc=viresh.kumar@linaro.org \
--cc=ysato@users.sourceforge.jp \
/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.