вложенная страничная ошибка адреса пользовательского пространства в Linux

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

ОС - Linux 2.6.30

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

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

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

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


person shankar    schedule 19.03.2010    source источник
comment
Я был готов ответить на этот вопрос дважды, проверил себя и все еще не уверен. +1 за отличный вопрос.   -  person Tim Post♦    schedule 19.03.2010


Ответы (2)


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

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

person SamB    schedule 29.03.2010

Совершенно верно. Собственно говоря, можно даже поспать.

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

person Nicolas Viennot    schedule 08.07.2011