LINUX.ORG.RU

Обработка исключений в ядре

 


0

3

Мне нужно в модуле обработать исключение вызванное приложением прикладного уровня, при доступе к памяти (обработать ситуацию, деления на ноль, либо доступ к не разрешённым адресам).
В модуле ядра, выделяю память под struct exception_table_entry и пробую зарегестрировать свой обработчик исключительной ситуации.(в модуле указал, адрес своего обработчика и количество этих обработчиков)
Для этого указываю insn - виртуальный адрес, памяти которая вызывает сбой.
insn = 0xffff88000c4560c0
(соответствует 00007ffa855050c0 - в юзерспайсе, приложении ) а также
fixup - функцию обработчик ( int my_fixup( void ) )
fixup = my_fixup
Далее копирую 0xffffffffffffff по адресу 0xffff88000c4560c0
Обращаюсь к адресу 00007ffa855050c0 из приложения прикладного уровня и, ничего не происходит. Прикладная программа продолжает работу, в ядре никаких Oops , хотя если не делать установку перехватчика, то при обращении к адресу 00007ffa855050c0 из пользовательского пространства, в лог системы попадает данное сообщение

segfault at ffffffffffffffff ip 00007ffa842c0fb6 sp 00007fffe616f028 error 5 in libc-2.19.so

Я никак не могу получить управление на свой my_fixup , чтоб при обращении по адресу 00007ffa855050c0 из приложения прикладного уровня, управление передалось на функцию моего модуля my_fixup
Как реализовать подобное правильно?


Код модуля ядра вместе с кодом приложения запости, дай телепатам отдохнуть уже.

cherry-pick
()

http://lxr.free-electrons.com/source/include/asm-generic/uaccess.h#L67

/*
 * The exception table consists of pairs of addresses: the first is the
 * address of an instruction that is allowed to fault, and the second is
 * the address at which the program should continue.

Не сходится с тем, о чём вы говорите. the first is the address of an instruction that is allowed to fault И приложения тут вообще ни при чём. И вообще мне не верится, что то, о чём вы говорите, должно работать.

Krieger_Od ★★
()

А в юзерспейсе сигнал обработать не выйдет?

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.