Re: [PATCH 17/17] sysctl: assert static storage for DEFINE_CTL_TABLE_POLL()

From: Joel Granados

Date: Fri Sep 18 2026 - 03:26:26 EST


On Mon, Sep 14, 2026 at 11:13:32PM -0400, Yury Norov wrote:
> DEFINE_CTL_TABLE_POLL() statically initializes an embedded wait queue.
> An automatic local poll object cannot provide the persistent lockdep
> class key expected by its wait queue lock.
>
> Add ASSERT_STATIC_STORAGE() to reject automatic declarations while
> preserving file-scope and static local definitions. Leave the underlying
> initializer available for embedded objects.
>
> Assisted-by: OpenAI Codex
> Signed-off-by: Yury Norov <ynorov@xxxxxxxxxx>
> ---
> include/linux/sysctl.h | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
> index e5d7226ab6f5..be79359346af 100644
> --- a/include/linux/sysctl.h
> +++ b/include/linux/sysctl.h
> @@ -22,6 +22,7 @@
> #ifndef _LINUX_SYSCTL_H
> #define _LINUX_SYSCTL_H
>
> +#include <linux/compiler.h>
> #include <linux/list.h>
> #include <linux/rcupdate.h>
> #include <linux/wait.h>
> @@ -216,7 +217,8 @@ static inline void *proc_sys_poll_event(struct ctl_table_poll *poll)
> .wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.wait) }
>
> #define DEFINE_CTL_TABLE_POLL(name) \
> - struct ctl_table_poll name = __CTL_TABLE_POLL_INITIALIZER(name)
> + struct ctl_table_poll name = __CTL_TABLE_POLL_INITIALIZER(name); \
> + ASSERT_STATIC_STORAGE(name)
>
> /* A sysctl table is an array of struct ctl_table: */
> struct ctl_table {
> --
> 2.53.0
>

This looks OK for sysctl and the two users of DEFINE_CTL_TABLE_POLL in
utsname_sysctl.c (hostname_poll and domainname_poll)

Reviewed-by: Joel Granados <joel.granados@xxxxxxxxxx>

Best

Attachment: signature.asc
Description: PGP signature