grsec 导致应用程序核心转储和内核恐慌

grsec 导致应用程序核心转储和内核恐慌

我有一个在嵌入式 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

这很棘手,但我找到了问题的根源,即使我仍在尝试理解它。

因此,内核配置中有一个默认激活的选项:“防止代码重用攻击”。我停用了它,效果很好。

我仍在尝试更好地理解它的实际用途,但我猜测它改变了共享库的使用方式(也许)。

无论如何,停用它解决了我的问题。所以我认为我的问题已经解决了。

更多信息: https://grsecurity.net/rap_faq.php

相关内容