ext4: check for directory entries too close to block end
[sfrench/cifs-2.6.git] / fs / ext4 / dir.c
index 9fdd2b269d6172a6856ef0fb98419bf7ed599671..6305d5ec25af9a4f1725385308580dc5a4abe600 100644 (file)
@@ -81,6 +81,11 @@ int __ext4_check_dir_entry(const char *function, unsigned int line,
                error_msg = "rec_len is too small for name_len";
        else if (unlikely(((char *) de - buf) + rlen > size))
                error_msg = "directory entry overrun";
+       else if (unlikely(((char *) de - buf) + rlen >
+                         size - EXT4_DIR_REC_LEN(1) &&
+                         ((char *) de - buf) + rlen != size)) {
+               error_msg = "directory entry too close to block end";
+       }
        else if (unlikely(le32_to_cpu(de->inode) >
                        le32_to_cpu(EXT4_SB(dir->i_sb)->s_es->s_inodes_count)))
                error_msg = "inode out of bounds";