linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kasper Dupont <kasperd@daimi.au.dk>
To: Russell King <rmk@arm.linux.org.uk>
Cc: Linux-Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] 2.4 and 2.5: remove Alt-Sysrq-L
Date: Tue, 19 Mar 2002 22:30:00 +0100	[thread overview]
Message-ID: <3C97ADD8.71408946@daimi.au.dk> (raw)
In-Reply-To: <sc91c4ce.020@mail-01.med.umich.edu> <20020315150241.H24984@flint.arm.linux.org.uk> <3C96F015.24BDC9FF@daimi.au.dk> <20020319162840.F11739@flint.arm.linux.org.uk>

[-- Attachment #1: Type: text/plain, Size: 1647 bytes --]

Russell King wrote:
> 
> On Tue, Mar 19, 2002 at 09:00:21AM +0100, Kasper Dupont wrote:
> >
> > Why actually panic because of an attempt to kill init?
> >
> > Of course a message should be printed, but after that
> > couldn't do_exit enter a loop where it just handles
> > signals and zombies?
> 
> Examine the LKML archive around 23rd December 2001, where Alan Cox wrote:
> 
> | pid1 ends up trying to kill pid1 and it goes deeply down the toilet from
> | that point onwards. The Unix traditional world reboots when pid 1 dies.

Thank you for pointing that out. But I'm afraid it doesn't
answer my question. I understand that a system where init
has died cannot be expected to continue working like if
nothing was wrong.

What to do in this case might be a matter of taste, of
course a panic or a reboot does make sense. But trying to
recover as much as posible would also make sense. This
could be caused by a problem in userspace, the kernel does
not have to be corrupted already.

If we agree that this is a matter of taste lets not try to
argue about whose taste is the best.

I was really just wondering if the patch below would work.
Well I just tested it, and it did work like I expected. If
I killed init (by replacing /sbin/init with something else
and telling init to reexecute itself) I got the warning.
But the system continued to work.

Of course init would no longer respawn processes, and I
could not change runlevel. But I could login, kill
processes, and remount filesystems read-only. And no
processes became zombies.

-- 
Kasper Dupont -- der bruger for meget tid på usenet.
For sending spam use mailto:razor-report@daimi.au.dk

[-- Attachment #2: killinit.patch --]
[-- Type: text/plain, Size: 1451 bytes --]

--- exit.c~	Mon Feb 25 20:38:13 2002
+++ exit.c	Tue Mar 19 21:47:58 2002
@@ -429,6 +429,38 @@
 	write_unlock_irq(&tasklist_lock);
 }
 
+#define __KERNEL_SYSCALLS__
+#include <linux/unistd.h>
+NORET_TYPE void flush_child_loop(struct task_struct *curtask)
+{
+	struct k_sigaction sa;
+	daemonize();
+
+	spin_lock_irq(&curtask->sigmask_lock);
+	siginitsetinv(&curtask->blocked, sigmask(SIGCHLD));
+	recalc_sigpending(curtask);
+	spin_unlock_irq(&curtask->sigmask_lock);
+
+	/* Install a handler so SIGCLD is delivered */
+	sa.sa.sa_handler = SIG_IGN;
+	sa.sa.sa_flags = 0;
+	siginitset(&sa.sa.sa_mask, sigmask(SIGCHLD));
+	do_sigaction(SIGCHLD, &sa, (struct k_sigaction *)0);
+
+	for (;;) {
+		set_task_state(curtask, TASK_INTERRUPTIBLE);
+		schedule();
+		if (signal_pending(curtask)) {
+			while (waitpid(-1, (unsigned int *)0, __WALL|WNOHANG) > 0)
+				;
+			spin_lock_irq(&curtask->sigmask_lock);
+			flush_signals(curtask);
+			recalc_sigpending(curtask);
+			spin_unlock_irq(&curtask->sigmask_lock);
+		}
+	}
+}
+
 NORET_TYPE void do_exit(long code)
 {
 	struct task_struct *tsk = current;
@@ -437,8 +469,10 @@
 		panic("Aiee, killing interrupt handler!");
 	if (!tsk->pid)
 		panic("Attempted to kill the idle task!");
-	if (tsk->pid == 1)
-		panic("Attempted to kill init!");
+	if (tsk->pid == 1) {
+		printk(KERN_EMERG "Attempted to kill init!\n");
+		flush_child_loop(tsk);
+	}
 	tsk->flags |= PF_EXITING;
 	del_timer_sync(&tsk->real_timer);
 

  reply	other threads:[~2002-03-19 21:30 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-03-15 14:54 [PATCH] 2.4 and 2.5: remove Alt-Sysrq-L Nicholas Berry
2002-03-15 15:02 ` Russell King
2002-03-19  8:00   ` Kasper Dupont
2002-03-19 16:28     ` Russell King
2002-03-19 21:30       ` Kasper Dupont [this message]
2002-03-20  0:22         ` Alan Cox
  -- strict thread matches above, loose matches on Subject: below --
2002-03-15 13:16 Russell King
2002-03-15 14:11 ` David Woodhouse
2002-03-15 14:28   ` Russell King
2002-03-15 14:32   ` David Woodhouse
2002-03-15 14:42     ` Russell King
2002-03-15 14:46     ` David Woodhouse

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3C97ADD8.71408946@daimi.au.dk \
    --to=kasperd@daimi.au.dk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rmk@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).