* [ext3,ext4] old bug in htree_dirblock_to_tree()
@ 2013-06-17 15:23 Al Viro
2013-06-18 16:01 ` Theodore Ts'o
0 siblings, 1 reply; 2+ messages in thread
From: Al Viro @ 2013-06-17 15:23 UTC (permalink / raw)
To: linux-ext4; +Cc: linux-kernel, Jan Kara
Both ext3 and ext4 htree_dirblock_to_tree() is just filling
the in-core rbtree for use by call_filldir(). All updates of
->f_pos are done by the latter; bumping it here (on error) is obviously
wrong - we might very well have it nowhere near the block we'd found
an error in.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
index 7523c61f..998ea11 100644
--- a/fs/ext3/namei.c
+++ b/fs/ext3/namei.c
@@ -576,11 +576,8 @@ static int htree_dirblock_to_tree(struct file *dir_file,
if (!ext3_check_dir_entry("htree_dirblock_to_tree", dir, de, bh,
(block<<EXT3_BLOCK_SIZE_BITS(dir->i_sb))
+((char *)de - bh->b_data))) {
- /* On error, skip the f_pos to the next block. */
- dir_file->f_pos = (dir_file->f_pos |
- (dir->i_sb->s_blocksize - 1)) + 1;
- brelse (bh);
- return count;
+ /* silently ignore the rest of the block */
+ break;
}
ext3fs_dirhash(de->name, de->name_len, hinfo);
if ((hinfo->hash < start_hash) ||
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 6653fc3..ab2f6dc 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -918,11 +918,8 @@ static int htree_dirblock_to_tree(struct file *dir_file,
bh->b_data, bh->b_size,
(block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb))
+ ((char *)de - bh->b_data))) {
- /* On error, skip the f_pos to the next block. */
- dir_file->f_pos = (dir_file->f_pos |
- (dir->i_sb->s_blocksize - 1)) + 1;
- brelse(bh);
- return count;
+ /* silently ignore the rest of the block */
+ break;
}
ext4fs_dirhash(de->name, de->name_len, hinfo);
if ((hinfo->hash < start_hash) ||
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [ext3,ext4] old bug in htree_dirblock_to_tree()
2013-06-17 15:23 [ext3,ext4] old bug in htree_dirblock_to_tree() Al Viro
@ 2013-06-18 16:01 ` Theodore Ts'o
0 siblings, 0 replies; 2+ messages in thread
From: Theodore Ts'o @ 2013-06-18 16:01 UTC (permalink / raw)
To: Al Viro; +Cc: linux-ext4, linux-kernel, Jan Kara
On Mon, Jun 17, 2013 at 04:23:38PM +0100, Al Viro wrote:
> Both ext3 and ext4 htree_dirblock_to_tree() is just filling
> the in-core rbtree for use by call_filldir(). All updates of
> ->f_pos are done by the latter; bumping it here (on error) is obviously
> wrong - we might very well have it nowhere near the block we'd found
> an error in.
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Applied, thanks. Nice catch!
Jan, I'll carry the fix for ext3 as well in the ext4 tree, unless
you'd prefer otherwise.
- Ted
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-06-18 16:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-17 15:23 [ext3,ext4] old bug in htree_dirblock_to_tree() Al Viro
2013-06-18 16:01 ` Theodore Ts'o
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).