ext4: Refuse to mount filesystems with 64bit feature set

With e2fsprogs after 1.43 the 64bit and metadata_csum features are
enabled by default.  The metadata_csum feature changes how
ext4_group_desc->bg_checksum is calculated, which would break write
support.  The 64bit feature however introduces changes such that it
cannot be read by implementations that do not support it.  Since we do
not support this, we must not mount it.

Cc: Stephen Warren <swarren@nvidia.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Lukasz Majewski <l.majewski@samsung.com>
Cc: Stefan Roese <sr@denx.de>
Reported-by: Andrew Bradford <andrew.bradford@kodakalaris.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index 40b798a..eb49fce 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -2229,6 +2229,16 @@
 	if (__le16_to_cpu(data->sblock.magic) != EXT2_MAGIC)
 		goto fail;
 
+	/*
+	 * The 64bit feature was enabled when metadata_csum was enabled
+	 * and we do not support metadata_csum (and cannot reliably find
+	 * files when it is set.  Refuse to mount.
+	 */
+	if (data->sblock.feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) {
+		printf("Unsupported feature found (64bit, possibly metadata_csum), not mounting\n");
+		goto fail;
+	}
+
 	if (__le32_to_cpu(data->sblock.revision_level == 0))
 		fs->inodesz = 128;
 	else