如何测试内核以检测内核崩溃?

8
我正在嵌入式设备上测试Linux内核,并希望找到Linux内核发出Panic的情况/场景。
您能否建议一些测试步骤(手动或代码自动化)来创建内核Panic?

如果有一种可靠的方法来创建内核崩溃,而不涉及将导致崩溃的代码注入到内核中,我希望这个漏洞在某个时候会被修复。 - Anon.
我曾经在设备开启的情况下拔掉存储设备。 - Paulo Scardine
3个回答

11

有各种工具可用于尝试崩溃您的计算机:

Crashme 试图执行随机代码;这对测试进程生命周期代码非常有用。

Fsx 是一个工具,用于广泛测试文件系统代码;适用于测试驱动程序、块 I/O 和文件系统代码。

Linux 测试项目 旨在创建大量内核测试用例库;虽然它可能并不是专门设计用于 崩溃 系统,但它可以帮助您和您的团队始终按计划运行。 (请注意,LTP 并非 规定性的 -- 内核社区不认为他们的测试很重要 -- 但 LTP 团队会非常努力地 描述 内核所做和不做的事情。)

如果您的设备连接到网络,可以使用各种扫描选项运行Nmap-sV --version-all 将尝试查找所有服务的版本(这可能会很紧张),-O --osscan-guess 将尝试通过向机器发送奇怪的网络数据包并根据响应猜测操作系统。

Nessus 扫描工具也可识别正在运行的服务版本;它可能(也可能不)比 Nmap 提供任何改进。

您还可以将设备交给用户使用;他们会发现软件可以做出最疯狂的事情,并且会发现您从未想过要寻找的漏洞。:)


谢谢,这很有用。但我如何理解crashme和fsx的输出?是否有关于如何理解这些程序输出的文档? - Ankur Agarwal
子进程59:收到信号4非法指令 子进程59:抛出异常 子进程59:尝试第15次,Badboy位于108472。0x1A7B8 子进程59:收到信号11分段错误 子进程59:抛出异常 子进程59:尝试第16次,Badboy位于110480。0x1AF90 子进程59:收到信号4非法指令 子进程59:抛出异常 子进程59:尝试第17次,Badboy位于112488。0x1B768 子进程59:收到信号4非法指令 子进程59:抛出异常 子进程59:尝试第18次,Badboy位于114496。0x1BF40 子进程59:收到信号11分段错误 子进程59:抛出异常 - Ankur Agarwal
@abc,所有这些看起来都是在尝试不同的机制来崩溃内核;你可能只需要调查内核开始表现不良时的输出--诊断消息是帮助你找出哪个特定的指令序列导致了内核崩溃。 - sarnold

9
您可以尝试以下按键组合:

SysRq + c

或者

echo c >/proc/sysrq-trigger


这是最佳方法。谢谢。以下是更多详细信息:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-kdump-configuration-testing.html - ARH

1

Crashme已知能够发现未知的内核崩溃情况,但必须以强有力的方式运行,以创建在进程中处理的各种信号异常和各种进程退出条件。

Crashme生成的消息的主要目的是确定是否发生了足够有趣的事情,以指示可能的效力。例如,如果需要mprotect调用来允许使用malloc分配的内存作为指令执行,而且如果您没有在源代码crashme.c中启用mprotect,则Crashme是无效的。

似乎x64架构上的操作系统倾向于关闭数据段的执行。最近,我已经更新了http://crashme.codeplex.com/上的crashme.c,以在__APPLE__的情况下使用mprotect并在运行MAC OS X Lion的MacBook Pro上进行了测试。这是自1994年以来对Crashme的首次重大更新。很快将会看到更新的Centos和Freebsd支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接