From 226383f45b2f2e6939f9f71efdf55615de9de624 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 7 Sep 2021 13:19:40 +0200 Subject: [PATCH] LibELF: Use StringView to carry temporary strings in auxiliary vector Let's not force clients to provide a String. --- Kernel/Syscalls/execve.cpp | 8 ++++---- Userland/DevTools/UserspaceEmulator/Emulator.cpp | 2 +- Userland/Libraries/LibELF/AuxiliaryVector.h | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 46cd482046..816e5a2fda 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -40,7 +40,7 @@ struct LoadResult { WeakPtr stack_region; }; -static Vector generate_auxiliary_vector(FlatPtr load_base, FlatPtr entry_eip, UserID uid, UserID euid, GroupID gid, GroupID egid, String executable_path, Optional const& main_program_fd_allocation); +static Vector generate_auxiliary_vector(FlatPtr load_base, FlatPtr entry_eip, UserID uid, UserID euid, GroupID gid, GroupID egid, StringView executable_path, Optional const& main_program_fd_allocation); static bool validate_stack_size(const Vector& arguments, const Vector& environment) { @@ -90,10 +90,10 @@ static KResultOr make_userspace_context_for_main_thread([[maybe_unused] VERIFY(result.is_success()); }; - auto push_string_on_new_stack = [&new_sp](const String& string) { + auto push_string_on_new_stack = [&new_sp](StringView string) { new_sp -= round_up_to_power_of_two(string.length() + 1, sizeof(FlatPtr)); Userspace stack_ptr = new_sp; - auto result = copy_to_user(stack_ptr, string.characters(), string.length() + 1); + auto result = copy_to_user(stack_ptr, string.characters_without_null_termination(), string.length() + 1); VERIFY(result.is_success()); }; @@ -633,7 +633,7 @@ KResult Process::do_exec(NonnullRefPtr main_program_description return KSuccess; } -static Vector generate_auxiliary_vector(FlatPtr load_base, FlatPtr entry_eip, UserID uid, UserID euid, GroupID gid, GroupID egid, String executable_path, Optional const& main_program_fd_allocation) +static Vector generate_auxiliary_vector(FlatPtr load_base, FlatPtr entry_eip, UserID uid, UserID euid, GroupID gid, GroupID egid, StringView executable_path, Optional const& main_program_fd_allocation) { Vector auxv; // PHDR/EXECFD diff --git a/Userland/DevTools/UserspaceEmulator/Emulator.cpp b/Userland/DevTools/UserspaceEmulator/Emulator.cpp index 65e50e8908..3f751f6927 100644 --- a/Userland/DevTools/UserspaceEmulator/Emulator.cpp +++ b/Userland/DevTools/UserspaceEmulator/Emulator.cpp @@ -115,7 +115,7 @@ void Emulator::setup_stack(Vector aux_vector) for (auto& auxv : aux_vector) { if (!auxv.optional_string.is_empty()) { - m_cpu.push_string(auxv.optional_string.characters()); + m_cpu.push_string(auxv.optional_string); auxv.auxv.a_un.a_ptr = (void*)m_cpu.esp().value(); } } diff --git a/Userland/Libraries/LibELF/AuxiliaryVector.h b/Userland/Libraries/LibELF/AuxiliaryVector.h index ab2d688bb1..f41d99e53d 100644 --- a/Userland/Libraries/LibELF/AuxiliaryVector.h +++ b/Userland/Libraries/LibELF/AuxiliaryVector.h @@ -89,7 +89,7 @@ struct AuxiliaryValue { auxv.a_type = type; auxv.a_un.a_ptr = (void*)ptr; } - AuxiliaryValue(Type type, String string) + AuxiliaryValue(Type type, StringView string) { auxv.a_type = type; auxv.a_un.a_ptr = nullptr; @@ -97,7 +97,7 @@ struct AuxiliaryValue { } auxv_t auxv {}; - String optional_string; + StringView optional_string; }; }