From 3ffdff5c02c89ac38d299bc25e8e446dbe5034fa Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Thu, 30 Jan 2020 14:05:36 +0300 Subject: [PATCH] Kernel: Dump backtrace when denying a path because of a veil This will make it much easier to see why a process wants to open the file. --- Kernel/FileSystem/VirtualFileSystem.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index c1579e89c3..db2f55dbcd 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -729,18 +729,21 @@ KResult VFS::validate_path_against_process_veil(StringView path, int options) auto* unveiled_path = find_matching_unveiled_path(path); if (!unveiled_path) { dbg() << "Rejecting path '" << path << "' since it hasn't been unveiled."; + dump_backtrace(); return KResult(-ENOENT); } if (options & O_CREAT) { if (!(unveiled_path->permissions & UnveiledPath::Access::CreateOrRemove)) { dbg() << "Rejecting path '" << path << "' since it hasn't been unveiled with 'c' permission."; + dump_backtrace(); return KResult(-EACCES); } } if (options & O_UNLINK_INTERNAL) { if (!(unveiled_path->permissions & UnveiledPath::Access::CreateOrRemove)) { dbg() << "Rejecting path '" << path << "' for unlink since it hasn't been unveiled with 'c' permission."; + dump_backtrace(); return KResult(-EACCES); } return KSuccess; @@ -748,18 +751,21 @@ KResult VFS::validate_path_against_process_veil(StringView path, int options) if (options & O_RDONLY) { if (!(unveiled_path->permissions & UnveiledPath::Access::Read)) { dbg() << "Rejecting path '" << path << "' since it hasn't been unveiled with 'r' permission."; + dump_backtrace(); return KResult(-EACCES); } } if (options & O_WRONLY) { if (!(unveiled_path->permissions & UnveiledPath::Access::Write)) { dbg() << "Rejecting path '" << path << "' since it hasn't been unveiled with 'w' permission."; + dump_backtrace(); return KResult(-EACCES); } } if (options & O_EXEC) { if (!(unveiled_path->permissions & UnveiledPath::Access::Execute)) { dbg() << "Rejecting path '" << path << "' since it hasn't been unveiled with 'x' permission."; + dump_backtrace(); return KResult(-EACCES); } }