linux-kernel - nucleo - update kernel ubuntu
Cómo imprimir el seguimiento de la pila del espacio de usuario en el kernelpace de Linux (2)
Digamos que engancho un controlador sys_ * (por ejemplo, sys_open); cuando encuentro que el argumento pasado desde el espacio de usuario es malicioso, imprimo el seguimiento de la pila del espacio de usuario. ¿Cómo puedo hacerlo?
(dump_stack () solo imprime la pila del kernel)
Puede enviar una señal (por ejemplo, SIGBUS, SIGKABRT), que puede generar un archivo de volcado de núcleo, al proceso de destino en kernel.
Por ejemplo:
do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);
Luego puede usar gdb para mostrar la traza inversa del archivo central generado.
Es muy complicado con un alcance de aplicación limitado.
oprofile
tiene soporte para rastreos de pila de espacio de usuario, y estos se computan en el kernel al recorrer las pilas de espacio de usuario. (Pero tenga en cuenta que no resuelve los símbolos, eso lo hacen las herramientas de informes en el espacio de usuario).
Si tuviera que resolver este problema, comenzaría a buscar (nuevamente) el código de oprofile y simplemente usar / adaptar lo que está allí.
Tal vez este tipo de ocurrencia "maliciosa" simplemente podría ser modelado como un tipo de evento oprofile para ser grabado, hmm.