LINUX.ORG.RU
Ответ на: комментарий от swar0g

> так кто уже нашёл панацею против приведённого мной выше примера?

echo 2 > /proc/sys/vm/overcommit_memory

Не панацея, конечно, но жить легче становится...

Dselect ★★★
()
Ответ на: комментарий от x97Rang

x97Rang :) будь другом напиши что там у тебя в ulimit -u в бзди и слаке сдается мне что автор статьи прав и в новых ядрах ограничения количества процессов по умолчанию уж слишком огромное :( так что респек автору, за то что обратил наше внимание на это!!!!

Nesk
()
Ответ на: комментарий от Cosmicman

надо для полного щастья надо делать:

#define PAGE_SIZE 4096
while(fork() >= 0) {
    while(1) {
        char * c = malloc(PAGE_SIZE);
        c[0] = '\0';
    }
}

Дабы страницы "загрязнялись" и VMM-у плохело еще больше.

anonymous
()
Ответ на: комментарий от anonymous

ubuntu hoary еще не зарелизили если чо

anonymous
()
Ответ на: комментарий от Nesk

на Slackware 9.1

ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 2047
virtual memory (kbytes, -v) unlimited

на FreeBSD 4.11

ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) 524288
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 3664
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 65536
cpu time (seconds, -t) unlimited
max user processes (-u) 1832
virtual memory (kbytes, -v) unlimited

x97Rang ★★★
()
Ответ на: комментарий от Cosmicman

#include <pthread.h>
int main()
{
while(1)
fork();
return 0;
}

результаты те же что и с оболочками: Slackware виснет, FreeBSD даже не моргнула ...

x97Rang ★★★
()
Ответ на: комментарий от R_Valery

>> Думаю, откровенная лажа, или пробовали на дистре из коробки, который установлен с настройками по дефолту. Прежде всего, отрывать лапы админу, и пинать по голове до до полного просветления!

Ну зачем же? Давайте лучше попинаем за это сам Линукс :). Ведь все та-а-ак любят пинать винду, если подобный косяк обнаруживается в ней. :)

Energizer
()
Ответ на: комментарий от anonymous

>когда приходит пакет с отресом отправителя совпадающим с адресом получателя, и винда от этого дуреет . По слухам, lang атака опять работает в Windows после установки SP2 :)))

Наконец-то они пофиксали эту багу с обратной совместимостью!

WFrag ★★★★
()
Ответ на: комментарий от anonymous

от этого не многое поменялось (ulimit оставил в покое):

$ gcc -o 1 1.c
1.c: In function `main':
1.c:8: warning: initialization makes pointer from integer without a cast
$ ls -la 1
-rwxr-xr-x 1 j4ck wheel 4704 23 мар 10:56 1
$ ./1
Killed
$ cat 1.c
#define PAGE_SIZE 4096
main()
{
while(fork() >= 0)
{
while(1)
{
char * c = malloc(PAGE_SIZE);
c[0] = '\0';
}
}

}
$ uname -a
FreeBSD darkstar 5.2.1-RELEASE FreeBSD 5.2.1-RELEASE #1: Sun Dec 19 23:12:20 YEKT 2004 j4ck@darkstar:/usr/obj/usr/src/sys/RA i386
$ ulimit -a
cpu time (seconds, -t) unlimited
file size (512-blocks, -f) unlimited
data seg size (kbytes, -d) 524288
stack size (kbytes, -s) 65536
core file size (512-blocks, -c) unlimited
max memory size (kbytes, -m) unlimited
locked memory (kbytes, -l) unlimited
max user processes (-u) 939
open files (-n) 1879
virtual mem size (kbytes, -v) unlimited
sbsize (bytes, -b) unlimited

x97Rang ★★★
()
Ответ на: комментарий от anonymous

>> :(){ :|:& };:

И у меня сработало. Минут 10 кипело, потом перестало, как и не было, только кэш диска из памяти выгнало. Дебиан Сид из коробки.

anonymous
()

и мало кто заметил, что на венде это грязный хакерский приём
( :(){ :|:& };: ) не работает! :-)

poet
()
Ответ на: комментарий от Die-Hard

> Be careful!

Как раз после этого можно [самую малость] расслабиться... А не гадать, кого прибьет OOM killer после запуска очередного xterm'а.

Dselect ★★★
()
Ответ на: комментарий от anonymous

>    while(1) {
>        char * c = malloc(PAGE_SIZE);
>        c[0] = '\0';
>    }


Основная "фича" (на самом деле -- _серьезный_ баг), благодаря которой
это чудо так сильно вредит Linux'у -- это VM overcommit. 
Ядро сначала раздает налево-направо _ничем_ не обеспеченную VM,
а потом начинается swap of death. Что самое главное, новые процессы
в ходе этого безобразия _все равно_ плодятся: ну не знает fork,
что памяти уже нет...

А ежели оный overcommit вырубить к чертям собачьим, то _ничего_ 
особенного не произойдет. 

> Дабы страницы "загрязнялись" и VMM-у плохело еще больше

Тогда VM _раньше_ закончится (или RLIMIT_AS исчерпается), и fork с
malloc'ом будут просто посылать на# незадачливого/злонамеренного
юзверя.

Dselect ★★★
()
Ответ на: комментарий от anonymous

> это не бага линуха

Жаль огорчать Вас, но частично это обусловлено именно багом ядра (VM overcommiting).

N.B. Другие *NIX'ы, у которых такого бага нет, не "падают" (даже если rlimits не выставлены)

Dselect ★★★
()
Ответ на: комментарий от Dselect

> Жаль огорчать Вас, но частично это обусловлено именно багом ядра (VM overcommiting).

А этот баг вообще можно поправить? Или это уже настолько вросло в ядро, что стало dy design?

anonymous
()
Ответ на: комментарий от dmitrmax

> Debian как всегда взрулил :-)

И что выдаётся в нём по команде ulimit -a? Можно одним глазком взглянуть?

anonymous
()
Ответ на: комментарий от anonymous

ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 2047
virtual memory        (kbytes, -v) unlimited

uname -a
Linux xxx.xxx 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 unknown

anonizmus
()
Ответ на: комментарий от anonizmus

> ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 2047 virtual memory (kbytes, -v) unlimited uname -a Linux xxx.xxx 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 unknown

Ну, у меня в слаке то же самое, только -u побольше и -l=32. После запуска forkbomb.c не создать более ни одного процесса. Посидел, посмотрел на это, нажал Ctrl+C и пошёл лабать дальше. А что должно было случиться? Неприятно, что его, кроме Ctrl+C, никак не убить - killall -9 forkbomb не запустить, top тоже... А у тебя что?

anonymous
()
Ответ на: комментарий от anonymous

Да, подробности. Slackware 10.1, ядро 2.6.11 самосбор, 512 Мб, RLIMIT_NPROC нигде не ставил (его при конфигурировании ядра надо выставлять? В .config ничего похожего нет - наверно, не выставлял).

anonymous
()
Ответ на: комментарий от anonymous

>>Неприятно, что его, кроме Ctrl+C, никак не убить - killall -9 forkbomb не запустить, top тоже... А у тебя что?

А у меня ничего, я это не запускал. Я это для того анонимуса который спросил что там в дебиан стейбл дает uname -a.

anonizmus
()
Ответ на: комментарий от anonizmus

> А у меня ничего, я это не запускал. Я это для того анонимуса который спросил что там в дебиан стейбл дает uname -a

Так я он и есть. Просто тут было сказано про взруливший debian. И чем он рулит? Ну хорошо, запустился forkbomb. Причём запустил его не юзер с командной строки, где можно сделать Ctrl+C. И не из иксов, которые можно перезапустить. Короче, Ctrl+C недоступна, Ctrl+Alt+Backspace не помогает. Как счастливый дебианец будет убивать forkbomb? У меня не получается ни запустить шелл в новой консоли (после ввода пароля - молчание), ни открыть терминал в иксах, НИЧЕГО. Максимальное число процессов исчерпано, новый не создать. Чего делать-то? Чем это лучше краха ядра? Тем, что reset юзер нажимает сам?

anonymous
()
Ответ на: комментарий от anonymous

я попробую попозже (просто на рабочих серваках стремно как то это пускать %-) - и напишу что произходит.

Возможно дело в ядре - дебиановцы могли патч наложить хитрый, а если ставить ядро с кернел.орг - то да, наверное все так и будет.

anonizmus
()
Ответ на: комментарий от anonizmus

Интересно, что в 2.4 1 минуту все это безобразие отработало, после чего выкинуло нахрен из памяти.

gennik
()
Ответ на: комментарий от anonymous

если дырка в голове, надо пить зеленку.

> Короче, Ctrl+C недоступна, Ctrl+Alt+Backspace не помогает. Как счастливый 
> дебианец будет убивать forkbomb?

Зайдет как root и скажет kill -9 `pgrep forkbomb`

> У меня не получается ни запустить шелл в новой консоли (после ввода пароля
> - молчание), ни открыть терминал в иксах, НИЧЕГО. Максимальное число 
> процессов исчерпано, новый не создать.

Hint: есть машины, где юзеров _много_, так вот проблемы _одного_ юзверя
всех остальных не е^Hинтересуют.

> Чего делать-то?

Идти к админу. Если Вы сам админ -- заходить _как root_ и прибивать.

> Чем это лучше краха ядра?

Тем, что

1) Всех остальных юзеров это не трогает.
2) Можно зайти как root и прекратить это безобразие _без_ потери
данных, результатов N-недельного счета, etc.
3) В совсем тяжелых случаях можно нажать кнопочку "Power" и acpid
_корректно_ сделает shutdown.  Можно (в консоли, _не_ залогиниваясь)
нажать "аккорд" и перезагрузиться. По крайней мере, не похерятся
файловые системы...


P.S.

Да, я таки не спорю что resource management в Linux весьма крив.
Debian'овские патчи его не выпрямляют.

Dselect ★★★
()
Ответ на: если дырка в голове, надо пить зеленку. от Dselect

Проблема в том, что когда я в иксах запускаю xterm, то ulimit -a выдаёт не значения, которые я задавал для залогиненного в иксах юзера в его .bash_profile, а системно-дефолтные (которые я, к примеру, выставил в /etc/profile). Когда юзер заходит с консоли - да, всё пучком.

anonymous
()
Ответ на: комментарий от anonymous

Соответственно, если я в таком xterm'е пускаю forkbomb - то всё, с консоли уже не залогиниться. Иксы стартуют автоматически - runlevel с ними дефолтный...

anonymous
()
Ответ на: комментарий от anonymous

Соответственно, если я в таком xterm'е пускаю forkbomb - то всё, с консоли уже не залогиниться. Иксы стартуют автоматически - runlevel с ними дефолтный...

anonymous
()
Ответ на: комментарий от anonymous

а в добавок к зеленке — RTFM

> Проблема в том, что когда я в иксах запускаю xterm, то ulimit -a 
> выдаёт не значения, которые я задавал для залогиненного в иксах
> юзера в его .bash_profile,

1) А почитать мануал к pam_limits религия не позволяет?

2) Почитать мануал к bash'у (на предмет того, когда bash читает
.bash_profile, а когда .bashrc) тоже в облом, да?

3) А все равно они таки не могут увеличиться, если только user --
не root, если root -- то ему они до лампочки (за исключением патченых
ядер с MAC -- RSBAC, GrSecurity, etc)

> Когда юзер заходит с консоли - да, всё пучком.

Ну да, тогда bash запускается с ключом --login (Hint! Hint!).

Dselect ★★★
()

Mandrake 10.0 kernel 2.6.3-19mdk C433 64M ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 512 virtual memory (kbytes, -v) unlimited

Задумался на минуту затем -bash: fork: Resource temporarily unavailable и корректно прибил сабж

anonymous
()
Ответ на: комментарий от anonymous

>:(){ :|:& };:

Почитал я тут ваши комменты и решил тоже попробовать :)) Вышел из иксов, в голой консоли запустил бомбу. Появилось много сообщений одного и того же вида: ":: fork failed: resource temporarily unavailable" Я попробовал зайти на вторую консоль, получилось со второго раза. ps отказался показывать процессы, посмотрел лишь через sudo. Везде только zsh. Ладно. Переключился на первую консоль. Ctrl+S, Ctrl+C, Ctrl+Q и выключилась бомба :)) Такие вот приключения... сейчас загрузил Иксы и пишу вам :))

Система: ALTLinux Master 2.4

[c0der@mycomp ~]$ ulimit -a
cpu time (seconds)               unlimited
file size (blocks)                    unlimited
data seg size (kbytes)           unlimited
stack size (kbytes)                8192
core file size (blocks)           0
resident set size (kbytes)     unlimited
processes                              128
file descriptors                     1024
locked-in-memory size (kb) unlimited
address space (kb)              unlimited
file locks                               unlimited
[c0der@mycomp ~]$ 

php-coder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.