mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 10:01:25 +00:00
[PATCH] replace cad_pid by a struct pid
There are a few places in the kernel where the init task is signaled. The ctrl+alt+del sequence is one them. It kills a task, usually init, using a cached pid (cad_pid). This patch replaces the pid_t by a struct pid to avoid pid wrap around problem. The struct pid is initialized at boot time in init() and can be modified through systctl with /proc/sys/kernel/cad_pid [ I haven't found any distro using it ? ] It also introduces a small helper routine kill_cad_pid() which is used where it seemed ok to use cad_pid instead of pid 1. [akpm@osdl.org: cleanups, build fix] Signed-off-by: Cedric Le Goater <clg@fr.ibm.com> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Paul Mackerras <paulus@samba.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
1a657f78dc
commit
9ec52099e4
11 changed files with 48 additions and 16 deletions
|
@ -68,7 +68,6 @@ extern int sysrq_enabled;
|
|||
extern int core_uses_pid;
|
||||
extern int suid_dumpable;
|
||||
extern char core_pattern[];
|
||||
extern int cad_pid;
|
||||
extern int pid_max;
|
||||
extern int min_free_kbytes;
|
||||
extern int printk_ratelimit_jiffies;
|
||||
|
@ -137,6 +136,9 @@ static int parse_table(int __user *, int, void __user *, size_t __user *,
|
|||
static int proc_do_uts_string(ctl_table *table, int write, struct file *filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos);
|
||||
|
||||
static int proc_do_cad_pid(ctl_table *table, int write, struct file *filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos);
|
||||
|
||||
static ctl_table root_table[];
|
||||
static struct ctl_table_header root_table_header =
|
||||
{ root_table, LIST_HEAD_INIT(root_table_header.ctl_entry) };
|
||||
|
@ -543,10 +545,10 @@ static ctl_table kern_table[] = {
|
|||
{
|
||||
.ctl_name = KERN_CADPID,
|
||||
.procname = "cad_pid",
|
||||
.data = &cad_pid,
|
||||
.data = NULL,
|
||||
.maxlen = sizeof (int),
|
||||
.mode = 0600,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_do_cad_pid,
|
||||
},
|
||||
{
|
||||
.ctl_name = KERN_MAX_THREADS,
|
||||
|
@ -2427,6 +2429,28 @@ proc_minmax:
|
|||
}
|
||||
#endif
|
||||
|
||||
static int proc_do_cad_pid(ctl_table *table, int write, struct file *filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
struct pid *new_pid;
|
||||
pid_t tmp;
|
||||
int r;
|
||||
|
||||
tmp = pid_nr(cad_pid);
|
||||
|
||||
r = __do_proc_dointvec(&tmp, table, write, filp, 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;
|
||||
}
|
||||
|
||||
#else /* CONFIG_PROC_FS */
|
||||
|
||||
int proc_dostring(ctl_table *table, int write, struct file *filp,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue