Glibc, PaX i problemy ...

Jakub Bogusz qboosh w pld-linux.org
Nie, 30 Sty 2005, 12:32:35 CET


On Sun, Jan 30, 2005 at 11:51:30AM +0100, Paweł Sikora wrote:
> On Sunday 30 of January 2005 10:57, Kosmo wrote:
> > Witam.
> >
> > Jakiś czas temu pisałem na liście że po upgradzie glibc'a rozwaliło mi
> > maszykę. Sprawa została zbadana:
> >
> > Nowy glibc zaczął respektować flagi w nagłówku PT_GNU_STACK bibliotek.
> > Między innymi jest tam informacja czy dana biblioteka ma mieć wykonywalny
> > stos. Część binarek u nas chce mieć taki fikuśny stos (np. libgcrypt), co
> > powoduje wywalenie się programu podczas ładowania bibliotek dzielonych
> > (glibc wykonuje mprotect(), który zwraca EPERM) i ogólną rozwałkę systemu.

A nie chodzi o to, że PaX zwraca EACCES przy próbie wywołania mprotect()
dla binarek, które właśnie wykonywalnego stosu sobie życzą?
(w starszym glibcu był dołączony taki hack ignorujący EACCES w takim
przypadku - ale to tylko ukrywanie problemu)

> > Na wcześniejszym glibcu takich negatywnych efektów nie zaobserwowałem
> > (wszystko miało non-exec na stosie i restrykcje na mprotect()), a na nowym
> > po wyczyszczeniu tej fagi na wszystkich bibliotekach za pomocą execstack
> > wszystko pięknie hula. Proponuję więc, aby czyścić tą flagę podczas
> > budowania rpm'ów.

To po kiego trzymać PaX, jak nie chcesz go używać?

> nie! nie będziemy dla popsutych programów przewalać wszystkich binarek.
> jak ktoś chce używać pax-a, to powinien wiedzieć co się z tym wiąże
> i kilka kłopotliwych bibliotek na serwerze sobie oflaguje odpowiednio
> albo autorzy je poprawią, bo w większości przypadków wykonywalny stos,
> to wina źle napisanych wstawek w asm., które z reguły go nie potrzebują.
> z sytuacji są przynajmniej 3 wyjścia:
> 
> [1] dodać .section .note.GNU-stack,"", w progbits; .previous
>     do plików .S które nie wykorzystują wykonywalnego stosu.
> [2] kompilować te programy przekazując do gcc -Wa,--noexecstack.
> [3] linkować z flagą -Wl,-z,noexecstack.
> 
> w ostateczności dla niereformowalnych wyjątków można %post puścić
> execstack, a nie protezować wszystkie binaria.

%post? To psuje zainstalowany pakiet (zmienia pliki).


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/




Więcej informacji o liście dyskusyjnej pld-devel-pl