Ol�,
No domingo estava discutindo com amigos como fazer com que este
programinha nao derrube o Linux, sendo executado por qqer usuario:
#include <unistd.h>
main() {
while(1) {
fork();
}
}
Coincidentemente, de ontem para hj rolou uma thread na
[EMAIL PROTECTED] sobre esse mesmo problema, e a solucao que
apresentaram foi limitar o parametro MAXPROC de cada usuario no
login.conf. Mas isso tem um problema. Note q cada processo filho tamb�m �
um pai, vamos pegar a saida do pstree numa chamada a fork() mais ou menos
assim:
thiago@ktb:~/code/c$ cat matalinux.c
#include <unistd.h>
main() {
int i = 0;
for(i=0;i<=10;i++) {
i += 1;
sleep(2);
fork();
}
}
No ultimo passo do loop, ele duplica o processo e continua do ponto de
onde parou, desde o pai ateh os filhos (man 2 fork). Facam o teste e
peguem uma das ultimas saidas do pstree, deve dar algo mais ou menos
assim:
bash---matalinux-+-matalinux-+-matalinux-+-matalinux-+-matalinux---matalinux
| | | `-matalinux
| | |-matalinux---matalinux
| | `-matalinux
| |-matalinux-+-matalinux---matalinux
| | `-matalinux
| |-matalinux---matalinux
| `-matalinux
|-matalinux-+-matalinux-+-matalinux---matalinux
| | `-matalinux
| |-matalinux---matalinux
| `-matalinux
|-matalinux-+-matalinux---matalinux
| `-matalinux
|-matalinux---matalinux
`-matalinux
Supondo q n�s limitamos a MAXPROC em 10 processos, ao atingir o limite o
FreeBSD, no caso, barraria a criacao de novos. Mas pelo que eu entendi, no
FreeBSD a limitacao de processos trabalha impedindo a criacao de novos
processos *depois* que a systemcall eh chamada. Mas este processo que esta
dentro do primeiro codigo continuaria a fazer systemcalls, consumindo CPU
da mesma maneira, at� a maquina cair. Mais ou menos um DoS interno.
Perguntas: como, no Linux, limitar o numero de processos por usuario da
mesma forma que no FreeBSD, e impedir q novas chamadas a fork() ou a
clone() sejam executadas assim que atingirmos o limite? ulimit nao vale,
jah que pode ser modificada pelo usuario. E como impedir que essa negacao
de servico cont�nua consuma os recursos da maquina de uma forma que, por
exemplo, o kernel destrua a sessao do usuario que tentar mais de 3 vezes
exceder o limite de processos?
J� foi criado algum patch para isso? Alguma id�ia?
--
Thiago Pimentel
Preview Tecnologia
Save the whales, feed the poor, free the malloc's.
Assinantes em 17/05/2001: 2291
Mensagens recebidas desde 07/01/1999: 113756
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista:
mailto:[EMAIL PROTECTED]