소스 검색

Kernel: Don't forget to copy & destroy root_directory_for_procfs

Also, rename it to root_directory_relative_to_global_root.
Sergey Bugaev 5 년 전
부모
커밋
33c0dc08a7
3개의 변경된 파일10개의 추가작업 그리고 8개의 파일을 삭제
  1. 1 1
      Kernel/FileSystem/ProcFS.cpp
  2. 7 5
      Kernel/Process.cpp
  3. 2 2
      Kernel/Process.h

+ 1 - 1
Kernel/FileSystem/ProcFS.cpp

@@ -577,7 +577,7 @@ Optional<KBuffer> procfs$pid_root(InodeIdentifier identifier)
     auto handle = ProcessInspectionHandle::from_pid(to_pid(identifier));
     if (!handle)
         return {};
-    return handle->process().root_directory_for_procfs().absolute_path().to_byte_buffer();
+    return handle->process().root_directory_relative_to_global_root().absolute_path().to_byte_buffer();
 }
 
 Optional<KBuffer> procfs$self(InodeIdentifier)

+ 7 - 5
Kernel/Process.cpp

@@ -578,6 +578,7 @@ pid_t Process::sys$fork(RegisterDump& regs)
     Thread* child_first_thread = nullptr;
     auto* child = new Process(child_first_thread, m_name, m_uid, m_gid, m_pid, m_ring, m_cwd, m_executable, m_tty, this);
     child->m_root_directory = m_root_directory;
+    child->m_root_directory_relative_to_global_root = m_root_directory_relative_to_global_root;
     child->m_promises = m_promises;
     child->m_execpromises = m_execpromises;
 
@@ -2769,6 +2770,7 @@ void Process::finalize()
     m_executable = nullptr;
     m_cwd = nullptr;
     m_root_directory = nullptr;
+    m_root_directory_relative_to_global_root = nullptr;
     m_elf_loader = nullptr;
 
     disown_all_shared_buffers();
@@ -4325,7 +4327,7 @@ int Process::sys$set_process_boost(pid_t pid, int amount)
     return 0;
 }
 
-int Process::sys$chroot(const char* user_path, size_t path_length)
+int Process::sys$chroot(const char* user_path, size_t path_length, int mount_flags)
 {
     if (!is_superuser())
         return -EPERM;
@@ -4350,11 +4352,11 @@ Custody& Process::root_directory()
     return *m_root_directory;
 }
 
-Custody& Process::root_directory_for_procfs()
+Custody& Process::root_directory_relative_to_global_root()
 {
-    if (!m_root_directory_for_procfs)
-        m_root_directory_for_procfs = root_directory();
-    return *m_root_directory_for_procfs;
+    if (!m_root_directory_relative_to_global_root)
+        m_root_directory_relative_to_global_root = root_directory();
+    return *m_root_directory_relative_to_global_root;
 }
 
 void Process::set_root_directory(const Custody& root)

+ 2 - 2
Kernel/Process.h

@@ -339,7 +339,7 @@ public:
     u32 priority_boost() const { return m_priority_boost; }
 
     Custody& root_directory();
-    Custody& root_directory_for_procfs();
+    Custody& root_directory_relative_to_global_root();
     void set_root_directory(const Custody&);
 
     bool has_promises() const { return m_promises; }
@@ -407,7 +407,7 @@ private:
     RefPtr<Custody> m_executable;
     RefPtr<Custody> m_cwd;
     RefPtr<Custody> m_root_directory;
-    RefPtr<Custody> m_root_directory_for_procfs;
+    RefPtr<Custody> m_root_directory_relative_to_global_root;
 
     RefPtr<TTY> m_tty;