Несколько модулей ядра, перехватывающих один и тот же системный вызов, и сбой при выгрузке

Я работаю над перехватом системных вызовов (для 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 ответов

Другие вопросы по тегам