Вложенная страница-ошибка адреса пространства пользователя в Linux - PullRequest
24 голосов
/ 19 марта 2010

Я хотел бы знать, является ли функционально неправильным ошибочное обращение к адресу пространства пользователя, когда ядро ​​запускает обработчик ошибок для ввода пользовательской страницы.

ОС - Linux 2.6.30

Предположим, что оба пользовательских адреса действительны (в пределах разрешения vma, rw) для задачи.

Когда я проверяю код ядра, я обнаруживаю, что ядро ​​не возражает против вложенной ошибки, еслиошибочные адреса действительны, и ошибка не произошла ни в атомарном контексте, ни в обработчике irq.

(я не думаю, что ответ зависит от процессора, но я бы добавил, что меня интересуют рука и мипс).

Например: сценарий может произойти, если я печатаю данные стека из обработчика ошибок страницы.

Ответы [ 2 ]

1 голос
/ 29 марта 2010

Просмотр исходных кодов ядра за последний час показывает, что все в порядке: ни определение struct vm_operations_struct , ни код между handle_mm_fault () и вызовом vma-> vm_ops -> ошибка в __ do_fault () содержит предостерегающие заявления по этому поводу, и немногие обработчики ошибок ->, на которые я смотрел, тоже не беспокоились об этом ...

... Я думаю, главное в том, что вам нужно избегать бесконечной рекурсии путем повторного сбоя по тому же адресу, но это, вероятно, произойдет, только если стек ядра находится в вашей vma что, скорее всего, не произойдет?

0 голосов
/ 08 июля 2011

Это абсолютно правильно. На самом деле, вы даже можете спать.

Но вы можете сделать это только после того, как эта строка пройдена, поскольку вы будете в неатомарном контексте.

...