]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sysctl: move cad_pid into kernel/pid.c
authorJoel Granados <joel.granados@kernel.org>
Mon, 5 May 2025 19:47:47 +0000 (21:47 +0200)
committerJoel Granados <joel.granados@kernel.org>
Wed, 23 Jul 2025 09:52:48 +0000 (11:52 +0200)
Move cad_pid as well as supporting function proc_do_cad_pid into
kernel/pic.c. Replaced call to __do_proc_dointvec with proc_dointvec
inside proc_do_cad_pid which requires the copy of the ctl_table to
handle the temp value.

This is part of a greater effort to move ctl tables into their
respective subsystems which will reduce the merge conflicts in
kernel/sysctl.c.

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Reviewed-by: Kees Cook <kees@kernel.org>
Signed-off-by: Joel Granados <joel.granados@kernel.org>
kernel/pid.c
kernel/sysctl.c

index 8317bcbc7cf7daa88602bbd9ea912934ca2c4ca2..9ea0db2cdc29c69993aa5c5bd9569ed0d51051fb 100644 (file)
@@ -713,6 +713,29 @@ static struct ctl_table_root pid_table_root = {
        .set_ownership  = pid_table_root_set_ownership,
 };
 
+static int proc_do_cad_pid(const struct ctl_table *table, int write, void *buffer,
+               size_t *lenp, loff_t *ppos)
+{
+       struct pid *new_pid;
+       pid_t tmp_pid;
+       int r;
+       struct ctl_table tmp_table = *table;
+
+       tmp_pid = pid_vnr(cad_pid);
+       tmp_table.data = &tmp_pid;
+
+       r = proc_dointvec(&tmp_table, write, buffer, lenp, ppos);
+       if (r || !write)
+               return r;
+
+       new_pid = find_get_pid(tmp_pid);
+       if (!new_pid)
+               return -ESRCH;
+
+       put_pid(xchg(&cad_pid, new_pid));
+       return 0;
+}
+
 static const struct ctl_table pid_table[] = {
        {
                .procname       = "pid_max",
@@ -723,6 +746,14 @@ static const struct ctl_table pid_table[] = {
                .extra1         = &pid_max_min,
                .extra2         = &pid_max_max,
        },
+#ifdef CONFIG_PROC_SYSCTL
+       {
+               .procname       = "cad_pid",
+               .maxlen         = sizeof(int),
+               .mode           = 0600,
+               .proc_handler   = proc_do_cad_pid,
+       },
+#endif
 };
 #endif
 
index 9d8db9cef11122993d850ab5c753e3da1cbfb5cc..d5bebdd02cd4f1def7d9dd2b85454a9022b600b7 100644 (file)
@@ -1224,28 +1224,6 @@ int proc_dointvec_ms_jiffies(const struct ctl_table *table, int write, void *buf
                                do_proc_dointvec_ms_jiffies_conv, NULL);
 }
 
-static int proc_do_cad_pid(const struct ctl_table *table, int write, void *buffer,
-               size_t *lenp, loff_t *ppos)
-{
-       struct pid *new_pid;
-       pid_t tmp;
-       int r;
-
-       tmp = pid_vnr(cad_pid);
-
-       r = __do_proc_dointvec(&tmp, table, write, buffer,
-                              lenp, ppos, NULL, NULL);
-       if (r || !write)
-               return r;
-
-       new_pid = find_get_pid(tmp);
-       if (!new_pid)
-               return -ESRCH;
-
-       put_pid(xchg(&cad_pid, new_pid));
-       return 0;
-}
-
 /**
  * proc_do_large_bitmap - read/write from/to a large bitmap
  * @table: the sysctl table
@@ -1541,15 +1519,6 @@ static const struct ctl_table kern_table[] = {
                .mode           = 0644,
                .proc_handler   = proc_dostring,
        },
-#endif
-#ifdef CONFIG_PROC_SYSCTL
-       {
-               .procname       = "cad_pid",
-               .data           = NULL,
-               .maxlen         = sizeof (int),
-               .mode           = 0600,
-               .proc_handler   = proc_do_cad_pid,
-       },
 #endif
        {
                .procname       = "overflowuid",