в списке рассылки новичков ядра.

отаю над перехватом системных вызовов (дляopen() системный вызов), и у меня есть одна проблема: у меня есть два модуля ядра (mod1 а такжеmod2) и они оба пытаются перехватитьopen() Системный вызов. Я загрузилmod1 сначала, а потомmod2,mod1 перехваченыopen() по:

original_open1 = sys_call_table[__NR_open];
sys_call_table[__NR_open] = mod1_open;

Вотoriginal_open1 было быsys_open, После этого,mod2 перехваченыopen() по:

original_open2 = sys_call_table[__NR_open];
sys_call_table[__NR_open] = mod2_open;

Вот,original_open2 было быmod1_open() поскольку мод1 был загружен первым. Теперь проблема заключается в следующем: Предположим, я выгружаюmod1 первый иopen() системный вызов выполняется, затемmod2_open() будет вызван, что в конечном итоге вызываетmod1_open().

посколькуmod1 уже выгружен, звонитmod1_open() вызовет панику (поскольку указатель на функцию больше не является допустимой областью памяти).

Мне нужен механизм, чтобы избежать этой проблемы. По сути, я хочу решение, которое облегчает загрузку / выгрузку модулей (которые перехватывают один и тот же системный вызов) в любом случайном порядке, не вызывая паники.

Ответы на вопрос(0)

Ваш ответ на вопрос