diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp index 57f948b9d0..f7e9b04b22 100644 --- a/Kernel/FileSystem/Inode.cpp +++ b/Kernel/FileSystem/Inode.cpp @@ -76,13 +76,13 @@ ErrorOr> Inode::read_entire(OpenFileDescription* descript return entire_file.release_nonnull(); } -ErrorOr> Inode::resolve_as_link(Custody& base, RefPtr* out_parent, int options, int symlink_recursion_level) const +ErrorOr> Inode::resolve_as_link(Credentials const& credentials, Custody& base, RefPtr* out_parent, int options, int symlink_recursion_level) const { // The default implementation simply treats the stored // contents as a path and resolves that. That is, it // behaves exactly how you would expect a symlink to work. auto contents = TRY(read_entire()); - return VirtualFileSystem::the().resolve_path(Process::current().credentials(), StringView { contents->bytes() }, base, out_parent, options, symlink_recursion_level); + return VirtualFileSystem::the().resolve_path(credentials, StringView { contents->bytes() }, base, out_parent, options, symlink_recursion_level); } Inode::Inode(FileSystem& fs, InodeIndex index) diff --git a/Kernel/FileSystem/Inode.h b/Kernel/FileSystem/Inode.h index 155a8e2567..2d8660ec98 100644 --- a/Kernel/FileSystem/Inode.h +++ b/Kernel/FileSystem/Inode.h @@ -69,7 +69,8 @@ public: virtual ErrorOr chmod(mode_t) = 0; virtual ErrorOr chown(UserID, GroupID) = 0; virtual ErrorOr truncate(u64) { return {}; } - virtual ErrorOr> resolve_as_link(Custody& base, RefPtr* out_parent, int options, int symlink_recursion_level) const; + + ErrorOr> resolve_as_link(Credentials const&, Custody& base, RefPtr* out_parent, int options, int symlink_recursion_level) const; virtual ErrorOr get_block_address(int) { return ENOTSUP; } diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index e51b2c90a9..bdb4f0858a 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -966,7 +966,7 @@ ErrorOr> VirtualFileSystem::resolve_path_without_veil(Cre TRY(validate_path_against_process_veil(*custody, options)); - auto symlink_target = TRY(child_inode->resolve_as_link(parent, out_parent, options, symlink_recursion_level + 1)); + auto symlink_target = TRY(child_inode->resolve_as_link(credentials, parent, out_parent, options, symlink_recursion_level + 1)); if (!have_more_parts) return symlink_target;