Commit e40ff213 authored by Theodore Ts'o's avatar Theodore Ts'o

ext4: force revalidation of directory pointer after seekdir(2)

A malicious user could force the directory pointer to be in an invalid
spot by using seekdir(2).  Use the mechanism we already have to notice
if the directory has changed since the last time we called
ext4_readdir() to force a revalidation of the pointer.

Reported-by: syzbot+1236ce66f79263e8a862@syzkaller.appspotmail.com
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org
parent 54dd0e0a
...@@ -365,13 +365,15 @@ static loff_t ext4_dir_llseek(struct file *file, loff_t offset, int whence) ...@@ -365,13 +365,15 @@ static loff_t ext4_dir_llseek(struct file *file, loff_t offset, int whence)
{ {
struct inode *inode = file->f_mapping->host; struct inode *inode = file->f_mapping->host;
int dx_dir = is_dx_dir(inode); int dx_dir = is_dx_dir(inode);
loff_t htree_max = ext4_get_htree_eof(file); loff_t ret, htree_max = ext4_get_htree_eof(file);
if (likely(dx_dir)) if (likely(dx_dir))
return generic_file_llseek_size(file, offset, whence, ret = generic_file_llseek_size(file, offset, whence,
htree_max, htree_max); htree_max, htree_max);
else else
return ext4_llseek(file, offset, whence); ret = ext4_llseek(file, offset, whence);
file->f_version = inode_peek_iversion(inode) - 1;
return ret;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment