Ver Fonte

FileSystem: Only retrieve inode metadata once in VFS::chown().

Andreas Kling há 6 anos atrás
pai
commit
aa35c08633
1 ficheiros alterados com 5 adições e 3 exclusões
  1. 5 3
      Kernel/FileSystem/VirtualFileSystem.cpp

+ 5 - 3
Kernel/FileSystem/VirtualFileSystem.cpp

@@ -413,11 +413,13 @@ KResult VFS::chown(StringView path, uid_t a_uid, gid_t a_gid, Custody& base)
     if (inode.fs().is_readonly())
     if (inode.fs().is_readonly())
         return KResult(-EROFS);
         return KResult(-EROFS);
 
 
-    if (current->process().euid() != inode.metadata().uid && !current->process().is_superuser())
+    auto metadata = inode.metadata();
+
+    if (current->process().euid() != metadata.uid && !current->process().is_superuser())
         return KResult(-EPERM);
         return KResult(-EPERM);
 
 
-    uid_t new_uid = inode.metadata().uid;
-    gid_t new_gid = inode.metadata().gid;
+    uid_t new_uid = metadata.uid;
+    gid_t new_gid = metadata.gid;
 
 
     if (a_uid != (uid_t)-1) {
     if (a_uid != (uid_t)-1) {
         if (current->process().euid() != a_uid && !current->process().is_superuser())
         if (current->process().euid() != a_uid && !current->process().is_superuser())