Kernel: Fix symlink deletion from tmpfs

Small symlinks store their target in inline storage of data block
indices. Freeing blocks did not account for this and tried to interpret
the link target as block inidices to delete
This commit is contained in:
Bananymous 2025-12-31 20:42:52 +02:00
parent bef1a56007
commit 9fbd9288b2
1 changed files with 3 additions and 0 deletions

View File

@ -123,6 +123,8 @@ namespace Kernel
void TmpInode::free_all_blocks()
{
if (mode().iflnk() && m_inode_info.size <= sizeof(TmpInodeInfo::block))
goto free_all_blocks_done;
for (size_t i = 0; i < TmpInodeInfo::direct_block_count; i++)
if (m_inode_info.block[i])
m_fs.free_block(m_inode_info.block[i]);
@ -132,6 +134,7 @@ namespace Kernel
free_indirect_blocks(block, 2);
if (size_t block = m_inode_info.block[TmpInodeInfo::direct_block_count + 2])
free_indirect_blocks(block, 3);
free_all_blocks_done:
for (auto& block : m_inode_info.block)
block = 0;
}