Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ec52099 authored by Cedric Le Goater's avatar Cedric Le Goater Committed by Linus Torvalds
Browse files

[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: default avatarCedric 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: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 1a657f78
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -123,7 +123,8 @@ static inline void power_button(void)
	if (machine_state & MACHINE_PANICED)
		return;

	if ((machine_state & MACHINE_SHUTTING_DOWN) || kill_proc(1,SIGINT,1)) {
	if ((machine_state & MACHINE_SHUTTING_DOWN) ||
			kill_cad_pid(SIGINT, 1)) {
		/* No init process or button pressed twice.  */
		sgi_machine_power_off();
	}
+1 −1
Original line number Diff line number Diff line
@@ -120,7 +120,7 @@ static inline void ip32_power_button(void)
	if (has_panicked)
		return;

	if (shuting_down || kill_proc(1, SIGINT, 1)) {
	if (shuting_down || kill_cad_pid(SIGINT, 1)) {
		/* No init process or button pressed twice.  */
		ip32_machine_power_off();
	}
+1 −1
Original line number Diff line number Diff line
@@ -357,7 +357,7 @@ static int dma_and_signal_ce_msg(char *ce_msg,
 */
static int shutdown(void)
{
	int rc = kill_proc(1, SIGINT, 1);
	int rc = kill_cad_pid(SIGINT, 1);

	if (rc) {
		printk(KERN_ALERT "mf.c: SIGINT to init failed (%d), "
+2 −3
Original line number Diff line number Diff line
@@ -127,9 +127,8 @@ static void button_consume_callbacks (int bpcount)
static void button_sequence_finished (unsigned long parameters)
{
#ifdef CONFIG_NWBUTTON_REBOOT		/* Reboot using button is enabled */
	if (button_press_count == reboot_count) {
		kill_proc (1, SIGINT, 1);	/* Ask init to reboot us */
	}
	if (button_press_count == reboot_count)
		kill_cad_pid(SIGINT, 1);	/* Ask init to reboot us */
#endif /* CONFIG_NWBUTTON_REBOOT */
	button_consume_callbacks (button_press_count);
	bcount = sprintf (button_output_buffer, "%d\n", button_press_count);
+1 −1
Original line number Diff line number Diff line
@@ -220,7 +220,7 @@ scdrv_dispatch_event(char *event, int len)
			       " Sending SIGPWR to init...\n");

		/* give a SIGPWR signal to init proc */
		kill_proc(1, SIGPWR, 0);
		kill_cad_pid(SIGPWR, 0);
	} else {
		/* print to system log */
		printk("%s|$(0x%x)%s\n", severity, esp_code, desc);
Loading