Как починить вилочную бомбу. :(){ :|: & };:

Поиск «глубины» в /usr/src/linux/fs/overlayfsпоказывает, что это просто проверка текущей глубины стека по FILESYSTEM_MAX_STACK_DEPTH. Поиск этого во включенных файлах обнаруживает, что FILESYSTEM_MAX_STACK_DEPTHопределяется как 2 в /usr/src/linux/include/linux/fs.h. В комментарии говорится

Maximum number of layers of fs stack. Needs to be limited to prevent kernel stack overflow

Очевидно, поскольку файловая системаproc-добавляет еще один уровень косвенности по сравнению с devили sys, вы превышаете глубину стека. Я не вижу какой-либо очевидной причины, по которой он не может стекироваться глубже, поэтому попробуйте увеличить FILESYSTEM_MAX_STACK_DEPTH, перекомпилируйте ядро ​​и посмотрите, работает ли оно.Это может привести к тому, что ядро ​​будет использовать больше стека, а значит, больше памяти в целом, и это может сделать его медленнее. -Я не знаю подробностей о реализации.

Изменить в ответ на комментарий

Я предполагаю, что файловая система procдолжна отслеживать файлы для каждого модуля, чтобы она могла удалить их при удалении модуля. По сути, это оверлейная файловая система для всех модулей. Но мне пришлось бы подробно прочитать источник, чтобы убедиться в этом (, и вы тоже можете прочитать источник. :-).

Глубина стека находится в поле stack_depthструктуры суперблока, поэтому, чтобы показать ее, вам нужен какой-то способ доступа к структурам данных ядра. Я полагаю, что это может сделать какой-нибудь инструмент отладки ядра (, или вы всегда можете написать расширение/модуль ядра, который где-то отображает это ), но я не знаю конкретного способа.

0
03.07.2017, 01:38
1 ответ

Мы почти уверены, что это не вилочная бомба, вызывающая это. Если у него есть 60 секунд, то есть много вещей, которые можно пробежать.

Я бы сделал:

terminal1$ wssh rpi-server cat /var/log/syslog > rpi-syslog
terminal2$ wssh rpi-server tail -f /var/log/syslog
terminal3$ wssh rpi-server top
terminal4$ wssh rpi-server dmesg

(wsshждет открытия порта и немедленно запускает SSH, так что вы войдете как можно скорее. Он использует w4it-for-port-openи nc: https://gitlab.com/ole.tange/tangetools/tree/master/w4it-for-port-open https://gitlab.com/ole.tange/tangetools/tree/master/wssh)

0
28.01.2020, 04:44

Теги

Похожие вопросы