diff options
author | Andreas Kling <kling@serenityos.org> | 2022-01-13 16:09:52 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-01-13 16:15:37 +0100 |
commit | 8ad46fd8f5a07c49d1a2cd40d22d748599f486e5 (patch) | |
tree | 7613772d5edcd67413fe87650f450de1b03f68ed /Kernel | |
parent | 611733af0d94bfb48893e7ff8a901f0900eab7fb (diff) | |
download | serenity-8ad46fd8f5a07c49d1a2cd40d22d748599f486e5.zip |
Kernel: Stop leaking executable path in successful sys$execve()
Since we don't return from sys$execve() when it's successful, we have to
take special care to tear down anything we've allocated.
Turns out we were not doing this for the full executable path itself.
Diffstat (limited to 'Kernel')
-rw-r--r-- | Kernel/Syscalls/execve.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 55496cb369..a3777541b5 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -840,6 +840,12 @@ ErrorOr<void> Process::exec(NonnullOwnPtr<KString> path, NonnullOwnPtrVector<KSt auto* current_thread = Thread::current(); if (current_thread == new_main_thread) { + { + // Make sure that `path` gets deleted before we teleport into the new process. + // If we don't do this, it will leak (since we never return from this function.) + OwnPtr<KString> path_deleter = move(path); + } + // We need to enter the scheduler lock before changing the state // and it will be released after the context switch into that // thread. We should also still be in our critical section |