glibc vs grsecurity
Jakub Bogusz
qboosh w pld-linux.org
Pią, 2 Lip 2004, 16:58:27 CEST
No to jeden poważny problem z glibc _wreszcie_ udało się rozwiązać.
Jak ktoś chce wiedzieć dlaczego, to wyjaśnienie poniżej.
Posłałem na buildery 2.4.26-5 bez tego psującego "ficzera".
Jednak przed zbudowaniem glibc trzeba uaktualnić jądra na builderach
i686 i sparc.
Do wyboru:
- albo do 2.4.26-5
- albo do tego co było z grsec z wyciętym fragmentem elf_brk+=...
- albo do jądra z grsec bez opcji RANDMMAP
- albo do jądra bez grsec
On Fri, Jul 02, 2004 at 02:29:53PM +0000, qboosh wrote:
> Author: qboosh Date: Fri Jul 2 14:29:53 2004 GMT
> Module: SOURCES Tag: HEAD
> ---- Log message:
> - disable randomized elf_brk, it caused ld-linux crashes
> ++#if 0
> ++/*
> ++ * randomly changing initial brk randomly breaks existing programs,
> ++ * including ld-linux.so.2 from glibc run as a program[1] and possibly
> ++ * more
> ++ *
> ++ * [1] see libc/sysdeps/generic/dl-sysdep.c:220:
> ++ *
> ++ * if (__sbrk (0) == &_end)
> ++ * /* The dynamic linker was run as a program, and so the initial break
> ++ * starts just after our bss, at &_end. The malloc in dl-minimal.c
> ++ * will consume the rest of this page, so tell the kernel to move the
> ++ * break up that far. When the user program examines its break, it
> ++ * will see this new value and not clobber our data. */
> ++ * __sbrk (GLRO(dl_pagesize)
> ++ * - ((&_end - (void *) 0) & (GLRO(dl_pagesize) - 1)));
> ++ *
> ++ * If initial brk is not equal _end, the last page is not reserved,
> ++ * which leads to semi-random crashes.
> ++ */
> ++ if (current->flags & PF_PAX_RANDMMAP)
> + elf_brk += pax_delta_mask(get_random_long(), 4, PAGE_SHIFT);
--
Jakub Bogusz http://cyber.cs.net.pl/~qboosh/
Więcej informacji o liście dyskusyjnej pld-devel-pl