From 9f29986935c068e5a7a71be36d2cd3a14dc37c6b Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Tue, 4 Feb 2020 19:37:26 +0000 Subject: [PATCH] Fix sbrk in PIE binaries In PIE mode, the program gets loaded at very low address, and thus _end is very low, just before libraries, and thus initializing the brk to it does not make sense, since there is no room left there. Hardcode the brk to 0x8000000 for now as a workaround. Signed-off-by: Samuel Thibault Gbp-Pq: Topic hurd-i386 Gbp-Pq: Name tg-pie-sbrk.diff --- sysdeps/mach/hurd/brk.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sysdeps/mach/hurd/brk.c b/sysdeps/mach/hurd/brk.c index 54ef52fd3..a6444565d 100644 --- a/sysdeps/mach/hurd/brk.c +++ b/sysdeps/mach/hurd/brk.c @@ -143,8 +143,12 @@ init_brk (void) /* If _hurd_brk is already set, don't change it. The assumption is that it was set in a previous run before something like Emacs's unexec was called and dumped all the data up to the break at that point. */ - if (_hurd_brk == 0) + if (_hurd_brk == 0) { _hurd_brk = (vm_address_t) &_end; + if (_hurd_brk < 0x8000000) + /* XXX: PIE case, get out of library area */ + _hurd_brk = 0x8000000; + } pagend = round_page (_hurd_brk); -- 2.30.2