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);
next prev parent 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).