Glibc, PaX i problemy ...

Paweł Sikora pluto w pld-linux.org
Nie, 30 Sty 2005, 11:51:30 CET


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.
>
> 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.

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.

-- 
/* Copyright (C) 2003, SCO, Inc. This is valuable Intellectual Property. */

                           #define say(x) lie(x)




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