【发布时间】:2012-04-29 06:12:51
【问题描述】:
说,我挂上了一个 sys_*(例如 sys_open)处理程序;当我发现从用户空间传递的参数是恶意的,我打印用户空间的堆栈跟踪。我该怎么做?
(dump_stack() 只打印内核堆栈)
【问题讨论】:
标签: linux-kernel
说,我挂上了一个 sys_*(例如 sys_open)处理程序;当我发现从用户空间传递的参数是恶意的,我打印用户空间的堆栈跟踪。我该怎么做?
(dump_stack() 只打印内核堆栈)
【问题讨论】:
标签: linux-kernel
您可以向内核中的目标进程发送一个可以生成核心转储文件的信号(例如SIGBUS,SIGKABRT)。
例如:
do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);
然后你可以使用gdb来显示生成的核心文件的回溯。
应用范围有限,非常棘手。
【讨论】:
oprofile 支持用户空间堆栈跟踪,这些跟踪是在内核中通过遍历用户空间堆栈来计算的。 (但请注意:它不解析符号;这是由用户空间中的报告工具完成的。)
如果我必须解决这个问题,我会开始(再次)查看 oprofile 代码并使用/调整那里的内容。
也许这种“恶意”事件可以简单地建模为一种要记录的 oprofile 事件,嗯。
【讨论】: