Kernel: Check parent's sticky bit in unlink

This commit is contained in:
Bananymous 2025-11-17 02:42:59 +02:00
parent db20801521
commit 839b9c8f07
1 changed files with 7 additions and 1 deletions

View File

@ -1305,9 +1305,15 @@ namespace Kernel
auto [parent, file_name] = TRY(find_parent_file(fd, path, O_WRONLY));
if (TRY(parent.inode->find_inode(file_name))->mode().ifdir() != (flag == AT_REMOVEDIR))
const auto inode = TRY(parent.inode->find_inode(file_name));
if (inode->mode().ifdir() != (flag == AT_REMOVEDIR))
return BAN::Error::from_errno(flag ? EPERM : ENOTDIR);
if (parent.inode->mode().mode & Inode::Mode::ISVTX)
if (m_credentials.ruid() != parent.inode->uid() && m_credentials.ruid() != inode->uid())
return BAN::Error::from_errno(EPERM);
TRY(parent.inode->unlink(file_name));
return 0;