Kernel: Check parent's sticky bit in unlink
This commit is contained in:
parent
db20801521
commit
839b9c8f07
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue