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