SELinux:reloc后无法恢复段prot:权限被拒绝

时间:2013-10-07 11:41:27

标签: c++ linux selinux relocation

我们正在SELinux环境中测试我们的应用程序。现在,我们收到以下错误:

dlopen failed to load libFoo.so -libFoo.so: cannot restore segment prot after reloc: Permission denied

据我所知my searches,这与共享库中.text部分的重定位有关。据我所知,我们已经将-fPIC用于所有共享库。虽然可能还有一些静态库也链接到这些共享库中。

如何找出导致此错误的重定位/符号弹出?我应该在共享库的nmobjdump -rR输出中查找什么内容?

或者我正在寻找错误的信息,问题出在除了共享库中生成的重定位之外的其他地方?

2 个答案:

答案 0 :(得分:1)

我找到了这个:http://akkadia.org/drepper/textrelocs.html,这基本上归结为使用eu-findtextrel查看确实存在哪些文本重定位的建议。使用-fPIC重新编译受影响的库然后解决问题。

答案 1 :(得分:0)

我认为这是一个很好的建议,因为它没有将SELinux设置为许可模式。

您也可以从here

chcon -t texrel_shlib_t <lib>

例如

chcon -t texrel_shlib_t libmylib.so

但是,这仍然是围绕着SELinux,所以-​​fPIC就是这样做的。我有一些问题,因为我错误地将-fPIC放入链接器标志中。 -fPIC是一个编译器选项!