]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - fs/ext4/namei.c
ext4: fix checksum errors with indexed dirs
[mirror_ubuntu-bionic-kernel.git] / fs / ext4 / namei.c
index 36fc79b6710ae175090f6867c927320b6d95de22..bc09f685ff0a0a33a120809eb5dcbf9ac0a275cf 100644 (file)
@@ -2084,6 +2084,13 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
                retval = ext4_dx_add_entry(handle, &fname, dir, inode);
                if (!retval || (retval != ERR_BAD_DX_DIR))
                        goto out;
+               /* Can we just ignore htree data? */
+               if (ext4_has_metadata_csum(sb)) {
+                       EXT4_ERROR_INODE(dir,
+                               "Directory has corrupted htree index.");
+                       retval = -EFSCORRUPTED;
+                       goto out;
+               }
                ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
                dx_fallback++;
                ext4_mark_inode_dirty(handle, dir);