diff options
| author | Marcel Braun <marcel.braun@ost.ch> | 2026-05-30 10:34:12 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-14 19:47:00 +0200 |
| commit | 63874f63ac91267ed6c9011306b47689f6edbbbd (patch) | |
| tree | 46ddfdadfbf65207bf6298c80544c0af008b2752 /kernel | |
| parent | f664f45f92af96bc0f4fd7561047d9fc532c9ddc (diff) | |
| download | kernel-63874f63ac91267ed6c9011306b47689f6edbbbd.tar.xz kernel-63874f63ac91267ed6c9011306b47689f6edbbbd.zip | |
Add check for inode type to ext2 inode write
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel/filesystem/ext2/inode.cpp | 5 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/inode.tests.cpp | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/kernel/kernel/filesystem/ext2/inode.cpp b/kernel/kernel/filesystem/ext2/inode.cpp index e873d446..136f37a4 100644 --- a/kernel/kernel/filesystem/ext2/inode.cpp +++ b/kernel/kernel/filesystem/ext2/inode.cpp @@ -78,6 +78,11 @@ namespace kernel::filesystem::ext2 auto inode::write(void const * buffer, size_t offset, size_t size) -> kstd::result<size_t> { + if (!is_regular()) + { + kapi::system::panic("[EXT2] ext2::inode write called on inode that is not of type regular"); + } + auto const max_writable = this->size() - offset; auto const requested_size = std::min(size, max_writable); diff --git a/kernel/kernel/filesystem/ext2/inode.tests.cpp b/kernel/kernel/filesystem/ext2/inode.tests.cpp index 7448181c..549e2032 100644 --- a/kernel/kernel/filesystem/ext2/inode.tests.cpp +++ b/kernel/kernel/filesystem/ext2/inode.tests.cpp @@ -316,6 +316,12 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, "Ext2 in auto const text = std::string_view{reinterpret_cast<char const *>(read_buffer.data()), *bytes_read}; REQUIRE(text == "Hello W"); } + + THEN("writing to a an inode of type directory panics") + { + auto write_buffer = kstd::vector<std::byte>(12, std::byte{0xAA}); + REQUIRE_THROWS_AS(information->write(write_buffer.data(), 0, write_buffer.size()), kernel::tests::cpu::halt); + } } } @@ -337,6 +343,7 @@ SCENARIO("Ext2 inode write across block boundaries", "[filesystem][ext2][inode]" inode_data.size = block_size * 2; inode_data.block[0] = 20; inode_data.block[1] = 21; + inode_data.mode = kernel::filesystem::ext2::constants::mode_regular; auto inode = kernel::filesystem::ext2::inode{&fs, inode_data}; |
