Bläddra i källkod

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.
Sergey Bugaev 5 år sedan
förälder
incheckning
3ffdff5c02
1 ändrade filer med 6 tillägg och 0 borttagningar
  1. 6 0
      Kernel/FileSystem/VirtualFileSystem.cpp

+ 6 - 0
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);
         }
     }