diff --git a/Userland/Libraries/LibC/malloc.cpp b/Userland/Libraries/LibC/malloc.cpp index fe410c9467..8e6d2579ca 100644 --- a/Userland/Libraries/LibC/malloc.cpp +++ b/Userland/Libraries/LibC/malloc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2018-2021, Andreas Kling * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -39,6 +39,7 @@ #include #include #include +#include // FIXME: Thread safety. @@ -74,6 +75,7 @@ static bool s_log_malloc = false; static bool s_scrub_malloc = true; static bool s_scrub_free = true; static bool s_profiling = false; +static bool s_in_userspace_emulator = false; struct MallocStats { size_t number_of_malloc_calls; @@ -425,6 +427,17 @@ void __malloc_init() { new (&malloc_lock()) LibThread::Lock(); +#ifdef __serenity__ + s_in_userspace_emulator = syscall(SC_emuctl) != ENOSYS; +#endif + + if (s_in_userspace_emulator) { + // Don't bother scrubbing memory if we're running in UE since it + // keeps track of heap memory anyway. + s_scrub_malloc = false; + s_scrub_free = false; + } + if (secure_getenv("LIBC_NOSCRUB_MALLOC")) s_scrub_malloc = false; if (secure_getenv("LIBC_NOSCRUB_FREE"))