![grsec 导致应用程序核心转储和内核恐慌](https://linux22.com/image/139300/grsec%20%E5%AF%BC%E8%87%B4%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%A0%B8%E5%BF%83%E8%BD%AC%E5%82%A8%E5%92%8C%E5%86%85%E6%A0%B8%E6%81%90%E6%85%8C.png)
我有一个在嵌入式 Linux 上运行的自定义应用程序(使用 Buildroot 生成)。使用 grsec 修补内核,然后在 linux-menuconfig 中启用 GRsecurity。我没有启用任何更多与 Grsec 相关的选项(除了防止代码重用)。
一切工作正常,除了一个应用程序因核心转储而崩溃并导致内核恐慌。
我尝试过相同的应用程序,但没有在内核中启用 Grsecurity(但仍在修补内核),并且它工作正常。
该应用程序需要通过特殊设备(例如 /dev/mydev)和 /etc/rc 文件中启动时加载的模块进行硬件访问。
我的想法是,也许 grsec 会阻止或改变模块的负载,即使 lsmod 或 modinfo 正确显示了模块。
最麻烦的是,很难获得更多相关信息,因为内核恐慌会导致设备重新启动(所以我只能读取消息的最后一行)。
这是错误消息:
worker_thread+0x58/0x490
process_one_work+0x3b0/0x3b0
kkthread_create_on_node+0x1b0/0x1b0
任何人都知道是否需要在内核中配置某些内容,以便可以正确加载任何树外模块?
我尝试阅读官方维基百科,但其中大部分是关于 RBAC 的,当我启动应用程序时,RBAC 并未激活。
答案1
这很棘手,但我找到了问题的根源,即使我仍在尝试理解它。
因此,内核配置中有一个默认激活的选项:“防止代码重用攻击”。我停用了它,效果很好。
我仍在尝试更好地理解它的实际用途,但我猜测它改变了共享库的使用方式(也许)。
无论如何,停用它解决了我的问题。所以我认为我的问题已经解决了。