From 17aad616d2e30fb17ae710ded5daa0ea2ba76192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Mon, 19 Apr 2010 19:04:40 +0000 Subject: [PATCH] Patch from Janito Ferreira Filho (bug #5706): limit the Inode ID to the maximum number of Inodes. Thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36358 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/ext2/Volume.cpp | 1 + src/add-ons/kernel/file_systems/ext2/Volume.h | 3 +++ src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/ext2/Volume.cpp b/src/add-ons/kernel/file_systems/ext2/Volume.cpp index 04c706e0af..1911dbb183 100644 --- a/src/add-ons/kernel/file_systems/ext2/Volume.cpp +++ b/src/add-ons/kernel/file_systems/ext2/Volume.cpp @@ -278,6 +278,7 @@ Volume::Mount(const char* deviceName, uint32 flags) fBlockSize = 1UL << fSuperBlock.BlockShift(); fFirstDataBlock = fSuperBlock.FirstDataBlock(); + fNumInodes = fSuperBlock.NumInodes(); fNumGroups = (fSuperBlock.NumBlocks() - fFirstDataBlock - 1) / fSuperBlock.BlocksPerGroup() + 1; fGroupsPerBlock = fBlockSize / sizeof(ext2_block_group); diff --git a/src/add-ons/kernel/file_systems/ext2/Volume.h b/src/add-ons/kernel/file_systems/ext2/Volume.h index 59b745841a..cea51c9260 100644 --- a/src/add-ons/kernel/file_systems/ext2/Volume.h +++ b/src/add-ons/kernel/file_systems/ext2/Volume.h @@ -38,6 +38,8 @@ public: fs_volume* FSVolume() const { return fFSVolume; } const char* Name() const; + uint32 NumInodes() const + { return fNumInodes; } off_t NumBlocks() const { return fSuperBlock.NumBlocks(); } off_t FreeBlocks() const @@ -74,6 +76,7 @@ private: uint32 fBlockSize; uint32 fBlockShift; uint32 fFirstDataBlock; + uint32 fNumInodes; uint32 fNumGroups; uint32 fGroupsPerBlock; ext2_block_group** fGroupBlocks; diff --git a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp index 69c7ed3e10..ad2bb08c37 100644 --- a/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/ext2/kernel_interface.cpp @@ -167,7 +167,7 @@ ext2_get_vnode(fs_volume* _volume, ino_t id, fs_vnode* _node, int* _type, { Volume* volume = (Volume*)_volume->private_volume; - if (id < 2 || id > volume->NumBlocks()) { + if (id < 2 || id > volume->NumInodes()) { dprintf("ext2: inode at %Ld requested!\n", id); return B_ERROR; }