Re[2]: Модуль ядра Linux
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.06.24 01:02
Оценка:
Здравствуйте, aik, Вы писали:

aik>Можешь, только памяти может не быть на месте (не выделена ещё или в свопе), и тогда будет page fault, который окей если это пользовательская память (тогда ядро вытащит страницу из свопа или наконец выделит память, и повторит чтение), или не окей, если это память самого ядра — тогда будет краш. Эти все put_user() — они чтоб ядро различало чья это память. Можно попробовать перед чтением вызвать get_user_pages_fast() (а потом не забыть put_page()).


put_user() — это такой специальный memcpy, у которого адрес начала и конца кода лежит в специальной отдельной секции. И если происходит исключение, связанное с обращением к памяти, ядро проверяет, часом не из put_user() ли оно прилетело. И если оттуда, относится к нему особым образом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.