diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c index ece0462a5d26..2ffe1df4adf4 100644 --- a/fs/ocfs2/dir.c +++ b/fs/ocfs2/dir.c @@ -1804,6 +1804,12 @@ static int ocfs2_dir_foreach_blk_id(struct inode *inode, OCFS2_DIR_REC_LEN(1)) break; i += le16_to_cpu(de->rec_len); + if (i > i_size_read(inode)) { + /* On a presumably invalid value, + skip the f_pos to the end. */ + ctx->pos = i_size_read(inode); + goto out; + } } ctx->pos = offset = i; *f_version = inode_query_iversion(inode);