bash Segfault por recursão infinita

2

Acabei de notar que o bash que estou usando (4.2.25 (1)) não está protegido contra a recursão de funções infinitas. Nesse caso, ocorre uma Segfault (e o processo bash termina). Para verificar isso no seu bash , basta digitar:

$ bash
$ f() { f; }
$ f

(Iniciar uma subzela primeiro (a primeira linha) nos dá um candidato que podemos experimentar sem colocar em risco o shell do terminal; sem a primeira linha, sua janela de terminal provavelmente fechará tão rapidamente que você não conseguirá ver nada interessante.) / p>

Eu entendo a razão desse fenômeno, eu acho; provavelmente é um estouro de pilha que resulta no bash tentando gravar em regiões da memória que não estão atribuídas ao seu processo.

O que eu estou pensando é sobre duas coisas:

  • Não deve haver uma verificação no bash para protegê-lo contra tais situações? Uma mensagem de erro mais decente como "Stack Overflow na função shell" certamente seria melhor do que um simples Segfault inútil.

  • Isso pode ser um problema de segurança? Antes de este método gravar em partes da memória que não são atribuídas ao processo (resultando em um Segfault), ele pode sobrescrever outras partes que não deveriam ser usadas para a pilha bash -internal.

por Alfe 19.02.2015 / 12:47

0 respostas