2013-03-21 5 views
1

Похоже, что мой модуль ядра выполняет разбиение нескольких стеков под большими нагрузками. Могу ли я использовать параметр компиляции -fstack-check для модулей ядра? Похоже, что этот параметр компиляции заставляет компилятор испускать дополнительный код, но не ссылку на библиотеку или среду выполнения. Это верно?Могу ли я использовать -fstack-check при компиляции моего модуля ядра Ubuntu 10.04?

У меня очень упрощенное ядро, которое мало что делает. Я могу загрузить это простое ядро ​​с включенной и без отладки отладки, а также будет загружаться с и без -fstack-check при компиляции. Когда я начинаю тестировать свой модуль, он начинает сбой, когда я использую параметр компиляции -fstack-check, тогда как, кажется, не срабатывают ошибки, а только отладка slub.

Другой вопрос (How does the gcc option -fstack-check exactly work?) предоставил некоторую информацию, но я не смог найти примеры людей, использующих параметр -fstack-check в компиляциях модуля ядра.

ответ

0

Площадь стека внутри ядра Linux строго ограничено. Переходите к своему коду с тонкой расческой, чтобы проверить, нет ли путей, слишком много используемых в локальных переменных, alloca() разрешено вообще. Кроме того, среда ядра жесткая. Внимательно проверьте свою логику. Добавьте тесты для возможных данных вне диапазона, данные трассировки в любом месте и убедитесь, что это всегда так, как вы считаете. Данные из userland - всегда - причина дополнительной паранойи.