From fff5139d807c84b166a5d935a1afe81826cb46e8 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 18 Nov 2025 04:14:09 +0200 Subject: [PATCH] Kernel: Add /proc//cwd Also update /proc//* permissions to match what linux does :D --- kernel/include/kernel/Process.h | 3 ++- kernel/kernel/FS/ProcFS/Inode.cpp | 6 ++++-- kernel/kernel/Process.cpp | 10 +++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/kernel/include/kernel/Process.h b/kernel/include/kernel/Process.h index a1b4a2e5..576f31d9 100644 --- a/kernel/include/kernel/Process.h +++ b/kernel/include/kernel/Process.h @@ -233,7 +233,8 @@ namespace Kernel size_t proc_meminfo(off_t offset, BAN::ByteSpan) const; size_t proc_cmdline(off_t offset, BAN::ByteSpan) const; size_t proc_environ(off_t offset, BAN::ByteSpan) const; - BAN::ErrorOr proc_executable() const; + BAN::ErrorOr proc_cwd() const; + BAN::ErrorOr proc_exe() const; BAN::StringView executable() const { return m_executable; } diff --git a/kernel/kernel/FS/ProcFS/Inode.cpp b/kernel/kernel/FS/ProcFS/Inode.cpp index 588bea70..02545507 100644 --- a/kernel/kernel/FS/ProcFS/Inode.cpp +++ b/kernel/kernel/FS/ProcFS/Inode.cpp @@ -15,9 +15,10 @@ namespace Kernel TRY(inode->link_inode(*inode, "."_sv)); TRY(inode->link_inode(static_cast(*fs.root_inode()), ".."_sv)); TRY(inode->link_inode(*MUST(ProcROProcessInode::create_new(process, &Process::proc_meminfo, fs, 0400)), "meminfo"_sv)); - TRY(inode->link_inode(*MUST(ProcROProcessInode::create_new(process, &Process::proc_cmdline, fs, 0400)), "cmdline"_sv)); + TRY(inode->link_inode(*MUST(ProcROProcessInode::create_new(process, &Process::proc_cmdline, fs, 0444)), "cmdline"_sv)); TRY(inode->link_inode(*MUST(ProcROProcessInode::create_new(process, &Process::proc_environ, fs, 0400)), "environ"_sv)); - TRY(inode->link_inode(*MUST(ProcSymlinkProcessInode::create_new(process, &Process::proc_executable, fs, 0400)), "exe"_sv)); + TRY(inode->link_inode(*MUST(ProcSymlinkProcessInode::create_new(process, &Process::proc_cwd, fs, 0777)), "cwd"_sv)); + TRY(inode->link_inode(*MUST(ProcSymlinkProcessInode::create_new(process, &Process::proc_exe, fs, 0777)), "exe"_sv)); return inode; } @@ -33,6 +34,7 @@ namespace Kernel (void)TmpDirectoryInode::unlink_impl("meminfo"_sv); (void)TmpDirectoryInode::unlink_impl("cmdline"_sv); (void)TmpDirectoryInode::unlink_impl("environ"_sv); + (void)TmpDirectoryInode::unlink_impl("cwd"_sv); (void)TmpDirectoryInode::unlink_impl("exe"_sv); } diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index bf3d7fbe..a8cbb9ba 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -508,7 +508,15 @@ namespace Kernel return read_from_vec_of_str(m_environ, offset, buffer); } - BAN::ErrorOr Process::proc_executable() const + BAN::ErrorOr Process::proc_cwd() const + { + LockGuard _(m_process_lock); + BAN::String result; + TRY(result.append(m_working_directory.canonical_path)); + return result; + } + + BAN::ErrorOr Process::proc_exe() const { LockGuard _(m_process_lock); BAN::String result;