summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2001-05-01 19:04:28 +0000
committerTheodore Ts'o <tytso@mit.edu>2001-05-01 19:04:28 +0000
commitf955cc14257e410a3e44457af4c6b75c1ef427f6 (patch)
tree4725ee8804176189e6ddd4ef7172a65ae21ee83b /lib
parent766b1e00a2164e97fc11035c515a583c8dd34a83 (diff)
downloade2fsprogs-f955cc14257e410a3e44457af4c6b75c1ef427f6.tar.gz
ChangeLog, dir_iterate.c:
dir_iterate.c (ext2fs_process_dir_block): Add a double-check to make sure the rec_len is a multiple of 4, to prevent bus-errors on architectures which care about mis-aligned pointer references.
Diffstat (limited to 'lib')
-rw-r--r--lib/ext2fs/ChangeLog7
-rw-r--r--lib/ext2fs/dir_iterate.c1
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog
index 264f42f9..26bde102 100644
--- a/lib/ext2fs/ChangeLog
+++ b/lib/ext2fs/ChangeLog
@@ -1,3 +1,10 @@
+2001-05-01 Theodore Tso <tytso@valinux.com>
+
+ * dir_iterate.c (ext2fs_process_dir_block): Add a double-check to
+ make sure the rec_len is a multiple of 4, to prevent
+ bus-errors on architectures which care about mis-aligned
+ pointer references.
+
2001-04-25 Theodore Tso <tytso@valinux.com>
* getsize.c (ext2fs_get_device_size): Use an unsigned long to
diff --git a/lib/ext2fs/dir_iterate.c b/lib/ext2fs/dir_iterate.c
index 2f07345f..c47d1e63 100644
--- a/lib/ext2fs/dir_iterate.c
+++ b/lib/ext2fs/dir_iterate.c
@@ -100,6 +100,7 @@ int ext2fs_process_dir_block(ext2_filsys fs,
dirent = (struct ext2_dir_entry *) (ctx->buf + offset);
if (((offset + dirent->rec_len) > fs->blocksize) ||
(dirent->rec_len < 8) ||
+ ((dirent->rec_len % 4) != 0) ||
(((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
ctx->errcode = EXT2_ET_DIR_CORRUPTED;
return BLOCK_ABORT;