Баш Segfault по бесконечной рекурсии

Я просто заметил, что bash Я использую (4.2.25(1)) не защищен от бесконечной рекурсии функции. В таком случае происходит Segfault (и bash процесс прекращается). Чтобы проверить это на вашем bash, просто введите:

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

(Запуск сначала подоболочки (первая строка) дает нам кандидата, с которым мы можем поэкспериментировать, не подвергая опасности оболочку терминала; без первой строки окно вашего терминала, вероятно, закроется так быстро, что вы не увидите ничего интересного.)

Я понимаю причину этого явления, я думаю; это, вероятно, переполнение стека, которое приводит к bash пытаясь записать в области памяти, которые не привязаны к его процессу.

Что меня интересует, так это две вещи:

  • Не должно ли быть проверка в bash защитить его от таких ситуаций? Более приличное сообщение об ошибке типа "Переполнение стека в функции оболочки", безусловно, будет лучше, чем простое бесполезное Segfault.

  • Может ли это быть проблемой безопасности? Перед тем, как этот метод записывает в части памяти, которые не назначены процессу (что приводит к Segfault), он может перезаписать другие части, которые не должны были использоваться для bashВнутренний стек.

0 ответов

Другие вопросы по тегам