Ver código fonte

Kernel: Resize Ext2FSInode when writing directory contents (#6897)

Ext2 directory contents are stored in a linked list of ext2_dir_entry
structs. There is no sentinel value to determine where the list ends.
Instead the list fills the entirety of the allocated space for the
inode.

Previously the inode was not correctly resized when it became smaller.
This resulted in stale data being interpreted as part of the linked list
of directory entries.
Mart G 4 anos atrás
pai
commit
6e641fadfa
1 arquivos alterados com 3 adições e 0 exclusões
  1. 3 0
      Kernel/FileSystem/Ext2FileSystem.cpp

+ 3 - 0
Kernel/FileSystem/Ext2FileSystem.cpp

@@ -1112,6 +1112,9 @@ KResult Ext2FSInode::write_directory(const Vector<Ext2FSDirectoryEntry>& entries
 
 
     stream.fill_to_end(0);
     stream.fill_to_end(0);
 
 
+    if (auto result = resize(stream.size()); result.is_error())
+        return result;
+
     auto buffer = UserOrKernelBuffer::for_kernel_buffer(stream.data());
     auto buffer = UserOrKernelBuffer::for_kernel_buffer(stream.data());
     auto result = write_bytes(0, stream.size(), buffer, nullptr);
     auto result = write_bytes(0, stream.size(), buffer, nullptr);
     if (result.is_error())
     if (result.is_error())