Múltiples módulos del núcleo que interceptan la misma llamada del sistema y se bloquean durante la descarga
Estoy trabajando en la intercepción de llamadas del sistema (paraopen()
llamada al sistema) y tengo un problema: tengo dos módulos de kernel (mod1
ymod2
) y ambos intentan interceptaropen()
syscall He cargadomod1
primero y luegomod2
. losmod1
interceptadoopen()
por:
original_open1 = sys_call_table[__NR_open];
sys_call_table[__NR_open] = mod1_open;
aquíoriginal_open1
seríasys_open
. Después de este,mod2
interceptadoopen()
por:
original_open2 = sys_call_table[__NR_open];
sys_call_table[__NR_open] = mod2_open;
Aquí,original_open2
seríamod1_open()
desde mod1 se cargó primero. Ahora, el problema es: supongamos que descargomod1
primero yopen()
la llamada al sistema se ejecuta, luegomod2_open()
sería llamado, que finalmente llamamod1_open()
.
Ya quemod1
ya está descargado, llamandomod1_open()
causaría pánico (ya que el puntero de función ya no es una región de memoria válida).
Necesito algún mecanismo para evitar este problema. Básicamente, quiero una solución que facilite la carga / descarga de los módulos (que interceptan la misma llamada al sistema) en cualquier orden aleatorio sin causar pánico.