From 8c7010f282e5b6757e167326e73f6b05ff125575 Mon Sep 17 00:00:00 2001 From: Max Wipfli Date: Sun, 11 Jul 2021 14:46:15 +0200 Subject: [PATCH] Kernel/VFS: Clear out_parent if path is veiled Previously, VirtualFileSystem::resolve_path() could return a non-null RefPtr* out_parent even if the function errored because the path has been veiled. If code relies on recieving the parent custody even if the path is veiled, it should just call resolve_path_without_veil and do the veil validation manually. This is because it could be that the parent is unveiled but the child isn't or the other way round. --- Kernel/FileSystem/VirtualFileSystem.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index 8efdacc338..c2a3f4d565 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -828,7 +828,11 @@ ErrorOr VirtualFileSystem::validate_path_against_process_veil(StringView p ErrorOr> VirtualFileSystem::resolve_path(StringView path, Custody& base, RefPtr* out_parent, int options, int symlink_recursion_level) { auto custody = TRY(resolve_path_without_veil(path, base, out_parent, options, symlink_recursion_level)); - TRY(validate_path_against_process_veil(*custody, options)); + if (auto result = validate_path_against_process_veil(*custody, options); result.is_error()) { + if (out_parent) + out_parent->clear(); + return result.release_error(); + } return custody; }