Kernel: Ext2 directory functions now fail on invalid blocks
Invalid blocks should only happen while writing to a file and I think in that case we should just bail out instead of giving you incomlete inode list or search result.
This commit is contained in:
parent
a083e588ba
commit
a8e3ee6f19
|
@ -217,6 +217,8 @@ namespace Kernel
|
|||
|
||||
BAN::ErrorOr<size_t> Ext2Inode::read(size_t offset, void* buffer, size_t count)
|
||||
{
|
||||
// FIXME: update atime if needed
|
||||
|
||||
if (ifdir())
|
||||
return BAN::Error::from_errno(EISDIR);
|
||||
|
||||
|
@ -231,7 +233,7 @@ namespace Kernel
|
|||
const uint32_t last_block = BAN::Math::div_round_up<uint32_t>(offset + count, block_size);
|
||||
|
||||
size_t n_read = 0;
|
||||
|
||||
|
||||
for (uint32_t block = first_block; block < last_block; block++)
|
||||
{
|
||||
uint32_t block_index = TRY(data_block_index(block));
|
||||
|
@ -257,15 +259,9 @@ namespace Kernel
|
|||
|
||||
for (uint32_t i = 0; i < data_block_count; i++)
|
||||
{
|
||||
auto data_block_index_or_error = data_block_index(i);
|
||||
if (data_block_index_or_error.is_error())
|
||||
{
|
||||
dprintln("{}", data_block_index_or_error.error());
|
||||
continue;
|
||||
}
|
||||
uint32_t block_index = TRY(data_block_index(i));
|
||||
auto block_data = TRY(m_fs.read_block(block_index));
|
||||
|
||||
auto block_data = TRY(m_fs.read_block(data_block_index_or_error.value()));
|
||||
|
||||
const uint8_t* block_data_end = block_data.data() + block_data.size();
|
||||
const uint8_t* entry_addr = block_data.data();
|
||||
|
||||
|
@ -293,14 +289,8 @@ namespace Kernel
|
|||
|
||||
for (uint32_t i = 0; i < data_block_count; i++)
|
||||
{
|
||||
auto data_block_index_or_error = data_block_index(i);
|
||||
if (data_block_index_or_error.is_error())
|
||||
{
|
||||
dprintln("{}", data_block_index_or_error.error());
|
||||
continue;
|
||||
}
|
||||
|
||||
auto block_data = TRY(m_fs.read_block(data_block_index_or_error.value()));
|
||||
uint32_t block_index = TRY(data_block_index(i));
|
||||
auto block_data = TRY(m_fs.read_block(block_index));
|
||||
|
||||
const uint8_t* block_data_end = block_data.data() + block_data.size();
|
||||
const uint8_t* entry_addr = block_data.data();
|
||||
|
|
Loading…
Reference in New Issue