Вложенная ошибка страницы в адресном пространстве пользователя в Linux
Я хотел бы знать, является ли это функционально неправильным для того, чтобы страница с ошибкой указывала адрес пользователя, когда ядро запускает обработчик ошибок для внесения пользовательской страницы.
ОС - Linux 2.6.30
Предположим, что оба пользовательских адреса действительны (попадают в разрешение vma, rw) для задачи.
Когда я проверяю код ядра, я обнаруживаю, что ядро не против вложенной ошибки
если неисправные адреса действительны и ошибка не возникла в атомарном контексте или в обработчике irq.
(Я не думаю, что ответ специфичен для процессора, но я бы добавил, что меня интересует
рука и мипы).
например: сценарий может произойти, если я распечатаю данные стека из обработчика ошибок страницы.
Ответы
Ответ 1
Просмотр источников ядра за последний час подсказывает, что это прекрасно: ни определение struct vm_operations_struct, ни код между handle_mm_fault() и вызов vma- > vm_ops- > fault в __ do_fault ( ) содержит какие-либо предостерегающие заявления об этом, а некоторые → обработчики ошибок, на которые я смотрел, тоже не беспокоились об этом...
... Я думаю, что главное, что вам нужно избегать перехода в бесконечную рекурсию с ошибкой по тому же адресу снова, но это, по-видимому, произойдет только в том случае, если стек ядра был в вашем vma, что, скорее всего, не произойдет?
Ответ 2
Это абсолютно правильно. На самом деле вы даже можете спать.
Но вы можете сделать это только один раз, когда эта строка будет передана, так как вы будете в неатомном контексте.