From ee5e8081da08ae73abc5c7fc1a199c6ad57da253 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 7 Aug 2020 17:27:38 +0200 Subject: [PATCH] UserspaceEmulator: Pass full path to new UE instance in virt$execve() Don't just pass argv[0] to the new UE, pass the full program path. --- DevTools/UserspaceEmulator/Emulator.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index 03331a6b07..91e2c1420a 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -963,6 +963,7 @@ int Emulator::virt$execve(FlatPtr params_addr) report("\n"); report("==%d== \033[33;1mSyscall:\033[0m execve\n", getpid()); + report("==%d== @ %s\n", getpid(), path.characters()); for (auto& argument : arguments) report("==%d== - %s\n", getpid(), argument.characters()); @@ -970,6 +971,7 @@ int Emulator::virt$execve(FlatPtr params_addr) Vector envp; argv.append(const_cast("/bin/UserspaceEmulator")); + argv.append(const_cast(path.characters())); auto create_string_vector = [](auto& output_vector, auto& input_vector) { for (auto& string : input_vector) @@ -980,6 +982,9 @@ int Emulator::virt$execve(FlatPtr params_addr) create_string_vector(argv, arguments); create_string_vector(envp, environment); + // Yoink duplicated program name. + argv.remove(2); + return execve(argv[0], (char* const*)argv.data(), (char* const*)envp.data()); }