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.

Respuestas a la pregunta(0)

Su respuesta a la pregunta