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));
|
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);
|
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));
|
TRY(parent.inode->unlink(file_name));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue