Skip to content

Commit

Permalink
replace brk and sbrk with stubs
Browse files Browse the repository at this point in the history
Pretend that there is never room to grow the heap in order to prevent
usage of these unsafe legacy functions. There are likely no users of
these in practice as it is inherently broken to use them outside of
malloc.

Signed-off-by: anupritaisno1 <www.anuprita804@gmail.com>
  • Loading branch information
thestinger committed Jun 7, 2021
1 parent 108754d commit 31456ac
Showing 1 changed file with 8 additions and 40 deletions.
48 changes: 8 additions & 40 deletions libc/bionic/brk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,48 +29,16 @@
#include <errno.h>
#include <unistd.h>

#if defined(__LP64__)
static void* __bionic_brk;
#else
void* __bionic_brk; // Accidentally exported by the NDK.
#if !defined(__LP64__)
void* __bionic_brk = reinterpret_cast<void*>(-1); // Accidentally exported by the NDK.
#endif

extern "C" void* __brk(void* __addr);

int brk(void* end_data) {
__bionic_brk = __brk(end_data);
if (__bionic_brk < end_data) {
errno = ENOMEM;
return -1;
}
return 0;
int brk(void*) {
errno = ENOMEM;
return -1;
}

void* sbrk(ptrdiff_t increment) {
// Initialize __bionic_brk if necessary.
if (__bionic_brk == nullptr) {
__bionic_brk = __brk(nullptr);
}

// Don't ask the kernel if we already know the answer.
if (increment == 0) {
return __bionic_brk;
}

// Avoid overflow.
uintptr_t old_brk = reinterpret_cast<uintptr_t>(__bionic_brk);
if ((increment > 0 && static_cast<uintptr_t>(increment) > (UINTPTR_MAX - old_brk)) ||
(increment < 0 && static_cast<uintptr_t>(-increment) > old_brk)) {
errno = ENOMEM;
return reinterpret_cast<void*>(-1);
}

void* desired_brk = reinterpret_cast<void*>(old_brk + increment);
__bionic_brk = __brk(desired_brk);
if (__bionic_brk < desired_brk) {
errno = ENOMEM;
return reinterpret_cast<void*>(-1);
}

return reinterpret_cast<void*>(old_brk);
void* sbrk(ptrdiff_t) {
errno = ENOMEM;
return reinterpret_cast<void*>(-1);
}

0 comments on commit 31456ac

Please sign in to comment.