2013-10-07 50 views
1

我們正在SELinux環境中測試我們的應用程序。現在,我們得到了以下錯誤:SELinux:在reloc後無法恢復segment prot:權限被拒絕

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

據我從​​明白了,這在共享庫.text部分涉及搬遷。據我所見,我們已經在爲所有共享庫使用-fPIC。雖然可能有一些靜態庫也鏈接到這些共享庫中。

如何找出重定位/符號導致此錯誤彈出?我應該在共享庫的輸出nmobjdump -rR中尋找什麼?

或者我是否在捕獲錯誤信息,問題在於除共享庫中生成的重定位之外的其他位置?

+0

好吧,不是一個小時後,我發現這個:http://www.akkadia.org/drepper/textrelocs.html,基本上歸結爲使用'eu-findtextrel'。 – wilx

回答

0

我認爲這是很好的建議,因爲它沒有將SELinux設置爲寬容模式。

你也可以從here

chcon -t texrel_shlib_t <lib> 

因此,例如

chcon -t texrel_shlib_t libmylib.so 

但是,這仍然讓周圍的SELinux這樣-fPIC是做它的方式。我有一些問題,因爲我錯誤地將-fPIC放入鏈接器標誌中。 -fPIC是一個編譯器選項!