public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: jhigdon <jhigdon@nni.com>
To: Ryan Underwood <nemesis-lists@icequake.net>,
	linux-kernel@vger.kernel.org
Subject: Re: Forking shell bombs
Date: Tue, 08 Jul 2003 15:23:37 -0400	[thread overview]
Message-ID: <3F0B1A39.8010801@nni.com> (raw)
In-Reply-To: <20030708184537.GJ1030@dbz.icequake.net>

Ryan Underwood wrote:

>Hi,
>
>:(){ :|:&};:
>
>Paste that into bash and watch linux die. (2.4.21 stock)
>
>I've seen some methods of dealing with infinitely forking processes, but
>short of solving the Halting Problem I doubt we will ever find a perfect
>solution to _preventing_ them.  So I had a few ideas that might help an
>admin _deal_ with a fork storm when it is occurring so that the S-U-B
>approach can be avoided.
>
>I also found it interesting that alt-sysrq-S took about 5 minutes to
>complete the sync.  Is there some sort of priority issue there?  I would
>think that kernel operations should forget about all the little annoying
>processes going crazy.  Also, eventually, the OOM killer started killing
>off stuff, but I noticed that it would repeatedly attempt to kill the
>same pid, such as gpm's pid, up to 10 times or so.  Was it not getting
>enough CPU time to die, or something?
>
>Anyway, here are my half-baked ideas, maybe someone else has more
>suggestions:
>
>1) Alt-SysRq-<x>- then type the name of a process and hit enter.  All
>processes matching this name are killed.  Drawback -- if you use this to
>kill e.g. bash, all your login shells will die too, putting a desktop
>user back at a login prompt.  This is ok for servers, not for desktops.
>This would solve shell bombs but not compiled bombs -- a process would
>just overwrite argv[0] after it forks with random gibberish to defeat
>it.
>
>2) Alt-SysRq-<x> - Kill all processes that share the most popular
>process size in the system table.  This way even if the name is changed,
>if there is a process making infinite copies of itself, since all the
>processes are carrying out the same action, they may have the same size.
>This is speculation and may be wrong.
>
>3) Alt-SysRq-<x> - Kill the process that has the most descendent
>processes.   This could be made "smart" so that it only kills off the
>part of the process tree where it really starts branching off, which
>is a likely candidate for where the fork bomb started.
>
>4) Since processes are created with increasing pids, a "killall" against
>a fork bomb does nothing.  It simply starts killing processes matching
>that name starting at the lowest pid.  But the processes which are
>forking at higher pids eventually wrap around and get lower pids again,
>which makes you end up with a forkbomb ring buffer.  Not too effective
>at getting rid of the problem.
>
>What about some sort of reverse killall, or a killall with specific
>capabilities tailored to taking out fork bombs?  My roommate suggested
>perhaps a "killall-bomb" may be in order.  A killall that forks
>infinitely just like the bomb does, but also works to kill off the bomb
>by filling up the process table itself.  Eventually the predators should
>exhaust their prey, and then expire themselves with nothing left to eat.
>
>5) Alt-SysRq-<x> - Until this key combination is pressed again, when a
>process tries to fork(), kill it instead.  After a couple seconds, all
>the forking annoyances should be gone.   You may lose some legitimate
>processes who try to fork within that interval, but you will most likely
>retain control of your system with little interruption. (?)
>
>6) A fork flag in a process header?  Perhaps like the digital copy
>flag to impose restrictions on consumer devices, a process should only
>be allowed to fork a set number of times before any further fork returns
>-1.
>
>When I am in sysadmin mode, the very last thing on earth I want to do is
>admit defeat to errant programs running on my system.  Perhaps the Linux
>kernel can be made more resilient to fork bomb behavior in the first
>place, but if not, it would certainly help to be able to take care of
>the problem once it is already happening, aside from a punch of the reset
>button.
>
>Comments appreciated!
>
>See ya,
>  
>
It's a base redhat kernel, after the cannot allocate memory, my system 
returned to normal operation and it didnt die.
Is this the type of behavior you were looking for? or am i off base?

Linux sloth 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 i686 i386 
GNU/Linux

$ :(){ :|:&};:
[1] 3071

$
[1]+  Done                    : | :

$ -bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory

Jon



  parent reply	other threads:[~2003-07-08 19:09 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-08 18:45 Forking shell bombs Ryan Underwood
2003-07-08 18:55 ` Charles Cazabon
2003-07-08 22:01   ` Alan Cox
2003-07-08 19:23 ` jhigdon [this message]
2003-07-08 20:35 ` vlad
     [not found] <20030708193401.24226.95499.Mailman@lists.us.dell.com>
2003-07-08 20:28 ` Ryan Underwood
2003-07-08 20:37   ` vlad
2003-07-08 20:43   ` jhigdon
2003-07-08 21:25     ` Ryan Underwood
2003-07-08 22:43       ` Sir Ace
2003-07-09 15:07       ` David Ford
2003-07-09 21:10         ` Ryan Underwood
2003-07-13  9:10         ` Riley Williams
2003-07-13  9:40           ` Jan-Benedict Glaw
2003-07-13 14:17           ` Gene Heskett
2003-07-08 21:59     ` system_lists
2003-07-08 17:18       ` Max Valdez
2003-07-08 22:25         ` Alan Cox
2003-07-08 22:26         ` Svein Ove Aas
2003-07-08 22:51     ` Ryan Underwood
2003-07-10 12:32     ` Luiz Capitulino
2003-07-08 23:05   ` Wakko Warner
2003-07-09 11:36   ` Michael Buesch
  -- strict thread matches above, loose matches on Subject: below --
2003-07-08 22:26 Perez-Gonzalez, Inaky
2003-07-09 11:05 Arvind Kandhare

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=3F0B1A39.8010801@nni.com \
    --to=jhigdon@nni.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nemesis-lists@icequake.net \
    /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