diff mbox series

[8/8] sysctl: Warn on an empty procname element

Message ID 20240604-jag-sysctl_remset-v1-8-2df7ecdba0bd@samsung.com (mailing list archive)
State New, archived
Headers show
Series [1/8] locking: Remove superfluous sentinel element from kern_lockdep_table | expand

Commit Message

Joel Granados via B4 Relay June 4, 2024, 6:29 a.m. UTC
From: Joel Granados <j.granados@samsung.com>

Add a pr_err warning in case a ctl_table is registered with a sentinel
element containing a NULL procname.

Signed-off-by: Joel Granados <j.granados@samsung.com>
---
 fs/proc/proc_sysctl.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Joel Granados June 14, 2024, 1:01 p.m. UTC | #1
On Tue, Jun 04, 2024 at 08:29:26AM +0200, Joel Granados via B4 Relay wrote:
> From: Joel Granados <j.granados@samsung.com>
> 
> Add a pr_err warning in case a ctl_table is registered with a sentinel
> element containing a NULL procname.
> 
> Signed-off-by: Joel Granados <j.granados@samsung.com>
> ---
>  fs/proc/proc_sysctl.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
> index 806700b70dea..f65098de5fcb 100644
> --- a/fs/proc/proc_sysctl.c
> +++ b/fs/proc/proc_sysctl.c
> @@ -1119,6 +1119,8 @@ static int sysctl_check_table(const char *path, struct ctl_table_header *header)
>  	struct ctl_table *entry;
>  	int err = 0;
>  	list_for_each_table_entry(entry, header) {
> +		if (!entry->procname)
> +			err |= sysctl_err(path, entry, "procname is null");
>  		if ((entry->proc_handler == proc_dostring) ||
>  		    (entry->proc_handler == proc_dobool) ||
>  		    (entry->proc_handler == proc_dointvec) ||
> 
> -- 
> 2.43.0
> 
> 
To add to this check, I sent out a static analysis check to smatch in
such a way that a warning will be printed out if there is a ctl_table
element with a procname or prog_handler that are NULL. You can see it
here https://lore.kernel.org/all/20240614-master-v1-1-c652f5aa15fb@samsung.com/

Best
diff mbox series

Patch

diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
index 806700b70dea..f65098de5fcb 100644
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -1119,6 +1119,8 @@  static int sysctl_check_table(const char *path, struct ctl_table_header *header)
 	struct ctl_table *entry;
 	int err = 0;
 	list_for_each_table_entry(entry, header) {
+		if (!entry->procname)
+			err |= sysctl_err(path, entry, "procname is null");
 		if ((entry->proc_handler == proc_dostring) ||
 		    (entry->proc_handler == proc_dobool) ||
 		    (entry->proc_handler == proc_dointvec) ||