set_memory_ * функционирует в ядре Linux> = 2.6.25 - PullRequest
0 голосов
/ 02 июня 2009

Я занимаюсь исследованием руткитов и получил много предупреждений типа `

"BUG: unable to handle kernel paging request at [addr]"

когда я пытался присоединить свою собственную функцию к sys_call_table[__NR_read], например.

В ядрах <= 2.6.25, функция <code>change_page_attr() помогла изменить атрибуты страницы определенного адреса. Однако в новых ядрах> = 2.6.28 эта функция устарела и заменена функциями set_memory_*, относящимися к PAT.

В документации ядра Linux нет ясности относительно использования функций PAT; Я использовал set_memory_wc() & set_memory_uc() для изменения разрешений sys_call_table, но продолжаю получать ту же ошибку. Эти функции, я думаю, заменяют старые change_page_attr().

Я видел один пример в модуле i915, и я использовал функции таким же образом, но ошибка продолжается.

Любая помощь по этому поводу? Я неправильно обрабатываю адреса ядра?

1 Ответ

2 голосов
/ 01 декабря 2009

Я протестировал специфичные для ядра Debian 2.6.26 и 2.6.30.

для 2.6.26 set_memory_wc и восстановление с помощью set_memory_wb работает.

2.6.30 не работает, если есть CONFIG_DEBUG_RODATA в Kernel Hacking (я думаю). У меня не было времени, чтобы на самом деле перекомпилировать, но я тестировал с кастомным ядром, у которого его нет.

в 2.6.30 set_memory_rw и set_memory_ro также экспортируются.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...