Мне нужно в модуле обработать исключение вызванное приложением прикладного уровня, при доступе к памяти (обработать ситуацию, деления на ноль, либо доступ к не разрешённым адресам).
В модуле ядра, выделяю память под 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
Как реализовать подобное правильно?