Vários módulos do kernel interceptando a mesma chamada e falha do sistema durante o descarregamento

Estou trabalhando na interceptação de chamadas do sistema (poropen() chamada do sistema) e eu tenho um problema: tenho dois módulos do kernel (mod1 emod2) e os dois estão tentando interceptaropen() syscall. Eu carregueimod1 primeiro e depoismod2. omod1 interceptadoopen() por:

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

Aquioriginal_open1 seriasys_open. Depois disto,mod2 interceptadoopen() por:

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

Aqui,original_open2 seriamod1_open() desde que o mod1 foi carregado primeiro. Agora, o problema é: Suponha que eu descarreguemod1 primeiro eopen() chamada do sistema é executada,mod2_open() seria chamado, o que acaba chamandomod1_open().

Desde amod1 já está descarregado, chamandomod1_open() causaria pânico (já que o ponteiro da função não é mais uma região de memória válida).

Eu preciso de algum mecanismo para evitar esse problema. Basicamente, quero uma solução que facilite o carregamento / descarregamento dos módulos (que interceptam o mesmo syscall) em qualquer ordem aleatória sem causar pânico.

questionAnswers(0)

yourAnswerToTheQuestion