SELinux: не удается восстановить prot сегмента после перемещения: в доступе отказано

Мы тестируем наше приложение в среде SELinux. Теперь мы получаем следующую ошибку:

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

Насколько я понимаю из мои поиски, это связано с переездом в .text раздел в общей библиотеке. Насколько я вижу, мы уже используем -fPIC для всех наших общих библиотек. Хотя, возможно, есть некоторые статические библиотеки, также связанные с этими общими библиотеками.

Как я могу узнать, какие перемещения / символы вызывают появление этой ошибки? Что я должен искать в nm или же objdump -rR выход для общей библиотеки?

Или я ловлю неправильную информацию, и проблема кроется где-то еще, кроме произведенных перемещений в общей библиотеке?

1

Решение

Я нашел это: http://akkadia.org/drepper/textrelocs.html, который в основном сводится к предложению использовать eu-findtextrel чтобы увидеть, какие текстовые перемещения существуют. Перекомпиляция затронутых библиотек с -fPIC затем решает проблему.

1

Другие решения

Я подумал, что это хороший совет, потому что он не установил SELinux в разрешающий режим.

Вы также можете от Вот.

chcon -t texrel_shlib_t <lib>

Так, например,

chcon -t texrel_shlib_t libmylib.so

Но это все еще обходит SELinux, так что -FPIC — способ сделать это. У меня были некоторые проблемы, потому что я неправильно ввел -fPIC во флаги компоновщика. -fPIC — это опция компилятора!

0

По вопросам рекламы [email protected]