bash Segfault durch unendliche Rekursion

710
Alfe

Mir ist gerade aufgefallen, dass das, was bashich verwende (4.2.25 (1)), nicht vor einer unendlichen Funktionsrekursion geschützt ist. In einem solchen Fall tritt ein Segfault auf (und der bashProzess wird beendet). Um dies auf Ihrem zu überprüfen bash, geben Sie einfach Folgendes ein:

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

(Wenn Sie zuerst eine Subshell (die erste Zeile) beginnen, erhalten Sie einen Kandidaten, mit dem Sie experimentieren können, ohne die Hülle des Terminals zu gefährden. Ohne die erste Zeile wird Ihr Terminalfenster wahrscheinlich so schnell geschlossen, dass Sie nichts Interessantes sehen.)

Ich verstehe den Grund dieses Phänomens, denke ich. Es ist wahrscheinlich ein Stapelüberlauf, der dazu führt, dass bashversucht wird, in Bereiche des Speichers zu schreiben, die nicht seinem Prozess zugeordnet sind.

Worüber ich mich wundere, sind zwei Dinge:

  • Sollte es nicht einen Check in geben bash, um es vor solchen Situationen zu schützen? Eine anständigere Fehlermeldung wie "Stack Overflow in Shell function" wäre sicherlich besser als ein einfacher, nicht hilfreicher Segfault.

  • Könnte dies eine Sicherheitslücke sein? Bevor diese Methode in Speicherbereiche schreibt, die nicht dem Prozess zugeordnet sind (was zu einem Segfault führt), werden möglicherweise andere Teile überschrieben, die nicht für den bashinternen Stack gedacht sind.

2
Kann dies für bash 3.2.57 (OS X 10.10.2 Yosemite) und 4.3.11 (Ubuntu 14.04 LTS) bestätigen. Dies sollte nicht passieren (von `man bash`):` Funktionen können rekursiv sein. Es gibt keine Beschränkung für die Anzahl der rekursiven Aufrufe. "Das bedeutet jedoch nur, dass" bash "dies nicht einschränkt, sondern nur der verfügbare Speicher :-). jaume vor 9 Jahren 1
Es scheint ein altbekanntes Verhalten seit mindestens 2003 zu sein. Vielleicht können Sie dies [interessant finden] (http://lists.gnu.org/archive/html/bug-bash/2003-12/msg00007.html). Hastur vor 9 Jahren 1
Vielen Dank @hastur, das war aufschlussreich über die Geschichte des "Fehlers". Es bleibt die Frage, ob dies eine Sicherheitsfrage ist. Vermutlich zu chaotisches Verhalten, um es auszunutzen. Alfe vor 9 Jahren 0

0 Antworten auf die Frage