我有一个在嵌入式 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
任何人都知道是否需要在内核中配置一些东西以便可以正确加载任何树外模块?
我尝试阅读官方 wikibook,但其中大部分是关于 RBAC 的,当我启动应用程序时它没有被激活。
这很棘手,但我找到了问题的根源,即使我仍在努力理解它。
因此,默认情况下激活的内核配置有一个选项:“防止代码重用攻击”。我停用了它,它工作正常。
我仍在努力更好地了解它的实际作用,但我猜它改变了一些共享库的使用方式(也许)。
无论如何,停用它解决了我的问题。所以我认为我的问题已经解决了。
更多信息: https ://grsecurity.net/rap_faq.php