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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user