diff options
author | Cedric Le Goater <clg@fr.ibm.com> | 2006-10-02 05:19:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 10:57:25 -0400 |
commit | 9ec52099e4b8678a60e9f93e41ad87885d64f3e6 (patch) | |
tree | a68fe051b39f8f8e8be469cbd3c2f653b9b71a9d /drivers | |
parent | 1a657f78dcc8ea7c53eaa1f2a45ea2315738c15f (diff) |
[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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/nwbutton.c | 5 | ||||
-rw-r--r-- | drivers/char/snsc_event.c | 2 | ||||
-rw-r--r-- | drivers/parisc/power.c | 3 | ||||
-rw-r--r-- | drivers/s390/s390mach.c | 2 |
4 files changed, 5 insertions, 7 deletions
diff --git a/drivers/char/nwbutton.c b/drivers/char/nwbutton.c index 7c57ebfa8640..ea1aa7764f8e 100644 --- a/drivers/char/nwbutton.c +++ b/drivers/char/nwbutton.c | |||
@@ -127,9 +127,8 @@ static void button_consume_callbacks (int bpcount) | |||
127 | static void button_sequence_finished (unsigned long parameters) | 127 | static void button_sequence_finished (unsigned long parameters) |
128 | { | 128 | { |
129 | #ifdef CONFIG_NWBUTTON_REBOOT /* Reboot using button is enabled */ | 129 | #ifdef CONFIG_NWBUTTON_REBOOT /* Reboot using button is enabled */ |
130 | if (button_press_count == reboot_count) { | 130 | if (button_press_count == reboot_count) |
131 | kill_proc (1, SIGINT, 1); /* Ask init to reboot us */ | 131 | kill_cad_pid(SIGINT, 1); /* Ask init to reboot us */ |
132 | } | ||
133 | #endif /* CONFIG_NWBUTTON_REBOOT */ | 132 | #endif /* CONFIG_NWBUTTON_REBOOT */ |
134 | button_consume_callbacks (button_press_count); | 133 | button_consume_callbacks (button_press_count); |
135 | bcount = sprintf (button_output_buffer, "%d\n", button_press_count); | 134 | bcount = sprintf (button_output_buffer, "%d\n", button_press_count); |
diff --git a/drivers/char/snsc_event.c b/drivers/char/snsc_event.c index d12d4f629cec..864854c58866 100644 --- a/drivers/char/snsc_event.c +++ b/drivers/char/snsc_event.c | |||
@@ -220,7 +220,7 @@ scdrv_dispatch_event(char *event, int len) | |||
220 | " Sending SIGPWR to init...\n"); | 220 | " Sending SIGPWR to init...\n"); |
221 | 221 | ||
222 | /* give a SIGPWR signal to init proc */ | 222 | /* give a SIGPWR signal to init proc */ |
223 | kill_proc(1, SIGPWR, 0); | 223 | kill_cad_pid(SIGPWR, 0); |
224 | } else { | 224 | } else { |
225 | /* print to system log */ | 225 | /* print to system log */ |
226 | printk("%s|$(0x%x)%s\n", severity, esp_code, desc); | 226 | printk("%s|$(0x%x)%s\n", severity, esp_code, desc); |
diff --git a/drivers/parisc/power.c b/drivers/parisc/power.c index fad5a33bf0fa..4a9f025a6b58 100644 --- a/drivers/parisc/power.c +++ b/drivers/parisc/power.c | |||
@@ -84,8 +84,7 @@ | |||
84 | 84 | ||
85 | static void deferred_poweroff(void *dummy) | 85 | static void deferred_poweroff(void *dummy) |
86 | { | 86 | { |
87 | extern int cad_pid; /* from kernel/sys.c */ | 87 | if (kill_cad_pid(SIGINT, 1)) { |
88 | if (kill_proc(cad_pid, SIGINT, 1)) { | ||
89 | /* just in case killing init process failed */ | 88 | /* just in case killing init process failed */ |
90 | machine_power_off(); | 89 | machine_power_off(); |
91 | } | 90 | } |
diff --git a/drivers/s390/s390mach.c b/drivers/s390/s390mach.c index 479364d0332a..e088b5e28711 100644 --- a/drivers/s390/s390mach.c +++ b/drivers/s390/s390mach.c | |||
@@ -208,7 +208,7 @@ s390_handle_mcck(void) | |||
208 | */ | 208 | */ |
209 | __ctl_clear_bit(14, 24); /* Disable WARNING MCH */ | 209 | __ctl_clear_bit(14, 24); /* Disable WARNING MCH */ |
210 | if (xchg(&mchchk_wng_posted, 1) == 0) | 210 | if (xchg(&mchchk_wng_posted, 1) == 0) |
211 | kill_proc(1, SIGPWR, 1); | 211 | kill_cad_pid(SIGPWR, 1); |
212 | } | 212 | } |
213 | #endif | 213 | #endif |
214 | 214 | ||