1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-25 18:45:06 +00:00

Kernel: Don't forget to copy & destroy root_directory_for_procfs

Also, rename it to root_directory_relative_to_global_root.
This commit is contained in:
Sergey Bugaev 2020-01-12 21:42:01 +03:00 committed by Andreas Kling
parent 8ca6e63119
commit 33c0dc08a7
3 changed files with 10 additions and 8 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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;