From 27203369b4ed89c3780d9cc1903c349e501ef886 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Thu, 13 Jun 2019 16:33:01 +0300 Subject: [PATCH] Kernel: Fix not returning errors for the last path item. Previously the check for an empty part would happen before the check for access and for the parent being a directory, and so an error in those would not be detected. --- Kernel/FileSystem/VirtualFileSystem.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index b4987089fd..296821094e 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -650,9 +650,6 @@ KResultOr> VFS::resolve_path(StringView path, Custody& base, R for (int i = 0; i < parts.size(); ++i) { bool inode_was_root_at_head_of_loop = crumb_id.is_root_inode(); - auto& part = parts[i]; - if (part.is_empty()) - break; auto crumb_inode = get_inode(crumb_id); if (!crumb_inode) return KResult(-EIO); @@ -661,6 +658,11 @@ KResultOr> VFS::resolve_path(StringView path, Custody& base, R return KResult(-ENOTDIR); if (!metadata.may_execute(current->process())) return KResult(-EACCES); + + auto& part = parts[i]; + if (part.is_empty()) + break; + auto current_parent = custody_chain.last(); crumb_id = crumb_inode->lookup(part); if (!crumb_id.is_valid())