diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp index 253f66e223d..2ae94dbc1d0 100644 --- a/Kernel/FileSystem/Ext2FileSystem.cpp +++ b/Kernel/FileSystem/Ext2FileSystem.cpp @@ -1023,7 +1023,9 @@ KResult Ext2FSInode::remove_child(const StringView& name) m_lookup_cache.remove(name); auto child_inode = fs().get_inode(child_id); - child_inode->decrement_link_count(); + result = child_inode->decrement_link_count(); + if (result.is_error()) + return result; did_remove_child(name); return KSuccess; diff --git a/Kernel/FileSystem/FileDescription.cpp b/Kernel/FileSystem/FileDescription.cpp index 43750a074c2..c47699ebeaa 100644 --- a/Kernel/FileSystem/FileDescription.cpp +++ b/Kernel/FileSystem/FileDescription.cpp @@ -187,13 +187,17 @@ ssize_t FileDescription::get_dir_entries(u8* buffer, ssize_t size) auto temp_buffer = ByteBuffer::create_uninitialized(size_to_allocate); BufferStream stream(temp_buffer); - VFS::the().traverse_directory_inode(*m_inode, [&stream](auto& entry) { + KResult result = VFS::the().traverse_directory_inode(*m_inode, [&stream](auto& entry) { stream << (u32)entry.inode.index(); stream << (u8)entry.file_type; stream << (u32)entry.name_length; stream << entry.name; return true; }); + + if (result.is_error()) + result.error(); + stream.snip(); if (static_cast(size) < temp_buffer.size()) diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index ab11ae36f5d..3a1bf93a1e4 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -191,9 +191,9 @@ bool VFS::is_vfs_root(InodeIdentifier inode) const return inode == root_inode_id(); } -void VFS::traverse_directory_inode(Inode& dir_inode, Function callback) +KResult VFS::traverse_directory_inode(Inode& dir_inode, Function callback) { - dir_inode.traverse_as_directory([&](const FS::DirectoryEntry& entry) { + return dir_inode.traverse_as_directory([&](const FS::DirectoryEntry& entry) { InodeIdentifier resolved_inode; if (auto mount = find_mount_for_host(entry.inode)) resolved_inode = mount->guest().identifier(); @@ -329,7 +329,9 @@ KResultOr> VFS::open(StringView path, int options return KResult(-EROFS); if (should_truncate_file) { - inode.truncate(0); + KResult result = inode.truncate(0); + if (result.is_error()) + return result; inode.set_mtime(kgettimeofday().tv_sec); } auto description = FileDescription::create(custody); diff --git a/Kernel/FileSystem/VirtualFileSystem.h b/Kernel/FileSystem/VirtualFileSystem.h index 3ca075431ee..923437c8c25 100644 --- a/Kernel/FileSystem/VirtualFileSystem.h +++ b/Kernel/FileSystem/VirtualFileSystem.h @@ -126,7 +126,7 @@ private: bool is_vfs_root(InodeIdentifier) const; - void traverse_directory_inode(Inode&, Function); + KResult traverse_directory_inode(Inode&, Function); Mount* find_mount_for_host(Inode&); Mount* find_mount_for_host(InodeIdentifier); diff --git a/Kernel/TTY/TTY.cpp b/Kernel/TTY/TTY.cpp index 65c4c247c6a..589149e2596 100644 --- a/Kernel/TTY/TTY.cpp +++ b/Kernel/TTY/TTY.cpp @@ -55,7 +55,9 @@ void TTY::set_default_termios() KResultOr TTY::read(FileDescription&, size_t, u8* buffer, size_t size) { if (Process::current()->pgid() != pgid()) { - Process::current()->send_signal(SIGTTIN, nullptr); + KResult result = Process::current()->send_signal(SIGTTIN, nullptr); + if (result.is_error()) + return result; return KResult(-EINTR); } @@ -91,7 +93,9 @@ KResultOr TTY::read(FileDescription&, size_t, u8* buffer, size_t size) KResultOr TTY::write(FileDescription&, size_t, const u8* buffer, size_t size) { if (Process::current()->pgid() != pgid()) { - Process::current()->send_signal(SIGTTOU, nullptr); + KResult result = Process::current()->send_signal(SIGTTOU, nullptr); + if (result.is_error()) + return result; return KResult(-EINTR); }