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
next prev 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