소스 검색

Kernel: Use u64 instead of size_t for BlockBasedFileSystem::read_block

This ensures offsets will not be truncated on large filesystems on i686
Idan Horowitz 3 년 전
부모
커밋
2065a73727
2개의 변경된 파일3개의 추가작업 그리고 3개의 파일을 삭제
  1. 2 2
      Kernel/FileSystem/BlockBasedFileSystem.cpp
  2. 1 1
      Kernel/FileSystem/BlockBasedFileSystem.h

+ 2 - 2
Kernel/FileSystem/BlockBasedFileSystem.cpp

@@ -212,7 +212,7 @@ ErrorOr<void> BlockBasedFileSystem::write_blocks(BlockIndex index, unsigned coun
     return {};
 }
 
-ErrorOr<void> BlockBasedFileSystem::read_block(BlockIndex index, UserOrKernelBuffer* buffer, size_t count, size_t offset, bool allow_cache) const
+ErrorOr<void> BlockBasedFileSystem::read_block(BlockIndex index, UserOrKernelBuffer* buffer, size_t count, u64 offset, bool allow_cache) const
 {
     VERIFY(m_logical_block_size);
     VERIFY(offset + count <= block_size());
@@ -221,7 +221,7 @@ ErrorOr<void> BlockBasedFileSystem::read_block(BlockIndex index, UserOrKernelBuf
     return m_cache.with_exclusive([&](auto& cache) -> ErrorOr<void> {
         if (!allow_cache) {
             const_cast<BlockBasedFileSystem*>(this)->flush_specific_block_if_needed(index);
-            auto base_offset = index.value() * block_size() + offset;
+            u64 base_offset = index.value() * block_size() + offset;
             auto nread = TRY(file_description().read(*buffer, base_offset, count));
             VERIFY(nread == count);
             return {};

+ 1 - 1
Kernel/FileSystem/BlockBasedFileSystem.h

@@ -26,7 +26,7 @@ public:
 protected:
     explicit BlockBasedFileSystem(OpenFileDescription&);
 
-    ErrorOr<void> read_block(BlockIndex, UserOrKernelBuffer*, size_t count, size_t offset = 0, bool allow_cache = true) const;
+    ErrorOr<void> read_block(BlockIndex, UserOrKernelBuffer*, size_t count, u64 offset = 0, bool allow_cache = true) const;
     ErrorOr<void> read_blocks(BlockIndex, unsigned count, UserOrKernelBuffer&, bool allow_cache = true) const;
 
     ErrorOr<void> raw_read(BlockIndex, UserOrKernelBuffer&);