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.