From 6bf901b4149b3b733842099ca4c2b8f3a85162f8 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 5 Sep 2021 14:19:51 +0200 Subject: [PATCH] Kernel: Use TRY() in sys$execve() There are more opportunities to use TRY() here, but it will require improvements to error propagation first. --- Kernel/Syscalls/execve.cpp | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 19f2ed940d2..0f1ed35b8e6 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -435,11 +435,8 @@ static KResultOr load_elf_object(NonnullOwnPtr return ENOMEM; } - auto stack_region_or_error = new_space->allocate_region(stack_range.value(), "Stack (Main thread)", PROT_READ | PROT_WRITE, AllocationStrategy::Reserve); - if (stack_region_or_error.is_error()) - return stack_region_or_error.error(); - auto& stack_region = *stack_region_or_error.value(); - stack_region.set_stack(true); + auto* stack_region = TRY(new_space->allocate_region(stack_range.value(), "Stack (Main thread)", PROT_READ | PROT_WRITE, AllocationStrategy::Reserve)); + stack_region->set_stack(true); return LoadResult { move(new_space), @@ -449,7 +446,7 @@ static KResultOr load_elf_object(NonnullOwnPtr AK::try_make_weak_ptr(master_tls_region), master_tls_size, master_tls_alignment, - stack_region.make_weak_ptr() + stack_region->make_weak_ptr() }; } @@ -513,13 +510,9 @@ KResult Process::do_exec(NonnullRefPtr main_program_description auto main_program_metadata = main_program_description->metadata(); - auto load_result_or_error = load(main_program_description, interpreter_description, main_program_header); - if (load_result_or_error.is_error()) { - dbgln("do_exec: Failed to load main program or interpreter for {}", path); - return load_result_or_error.error(); - } + auto load_result = TRY(load(main_program_description, interpreter_description, main_program_header)); - auto signal_trampoline_range = load_result_or_error.value().space->allocate_range({}, PAGE_SIZE); + auto signal_trampoline_range = load_result.space->allocate_range({}, PAGE_SIZE); if (!signal_trampoline_range.has_value()) { dbgln("do_exec: Failed to allocate VM for signal trampoline"); return ENOMEM; @@ -536,7 +529,6 @@ KResult Process::do_exec(NonnullRefPtr main_program_description kill_threads_except_self(); - auto& load_result = load_result_or_error.value(); bool executable_is_setid = false; if (!(main_program_description->custody()->mount_flags() & MS_NOSUID)) { @@ -858,10 +850,7 @@ KResult Process::exec(String path, Vector arguments, Vector envi // * ET_EXEC binary that just gets loaded // * ET_DYN binary that requires a program interpreter // - auto file_or_error = VirtualFileSystem::the().open(path, O_EXEC, 0, current_directory()); - if (file_or_error.is_error()) - return file_or_error.error(); - auto description = file_or_error.release_value(); + auto description = TRY(VirtualFileSystem::the().open(path, O_EXEC, 0, current_directory())); auto metadata = description->metadata(); if (!metadata.is_regular_file())