mirror of
https://github.com/torvalds/linux.git
synced 2025-12-01 07:26:02 +07:00
sysctl: move cad_pid into kernel/pid.c
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>
This commit is contained in:
31
kernel/pid.c
31
kernel/pid.c
@@ -713,6 +713,29 @@ static struct ctl_table_root pid_table_root = {
|
|||||||
.set_ownership = pid_table_root_set_ownership,
|
.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[] = {
|
static const struct ctl_table pid_table[] = {
|
||||||
{
|
{
|
||||||
.procname = "pid_max",
|
.procname = "pid_max",
|
||||||
@@ -723,6 +746,14 @@ static const struct ctl_table pid_table[] = {
|
|||||||
.extra1 = &pid_max_min,
|
.extra1 = &pid_max_min,
|
||||||
.extra2 = &pid_max_max,
|
.extra2 = &pid_max_max,
|
||||||
},
|
},
|
||||||
|
#ifdef CONFIG_PROC_SYSCTL
|
||||||
|
{
|
||||||
|
.procname = "cad_pid",
|
||||||
|
.maxlen = sizeof(int),
|
||||||
|
.mode = 0600,
|
||||||
|
.proc_handler = proc_do_cad_pid,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
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
|
* proc_do_large_bitmap - read/write from/to a large bitmap
|
||||||
* @table: the sysctl table
|
* @table: the sysctl table
|
||||||
@@ -1541,15 +1519,6 @@ static const struct ctl_table kern_table[] = {
|
|||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = proc_dostring,
|
.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
|
#endif
|
||||||
{
|
{
|
||||||
.procname = "overflowuid",
|
.procname = "overflowuid",
|
||||||
|
|||||||
Reference in New Issue
Block a user