diff --git a/drivers/mtd/mtdsplit/mtdsplit_squashfs.c b/drivers/mtd/mtdsplit/mtdsplit_squashfs.c
index f6353da..6e5c569 100644
--- a/drivers/mtd/mtdsplit/mtdsplit_squashfs.c
+++ b/drivers/mtd/mtdsplit/mtdsplit_squashfs.c
@@ -30,6 +30,9 @@ mtdsplit_parse_squashfs(struct mtd_info *master,
 	struct mtd_info *parent_mtd;
 	size_t part_offset;
 	size_t squashfs_len;
+	size_t dm_off, dm_len;
+	size_t retlen;
+	char verity[7];
 	int err;
 
 	err = mtd_get_squashfs_len(master, 0, &squashfs_len);
@@ -39,6 +42,25 @@ mtdsplit_parse_squashfs(struct mtd_info *master,
 	parent_mtd = mtd_get_master(master);
 	part_offset = mtdpart_get_offset(master);
 
+#define DM_VERITY_STR		"verity"
+#define DM_VERITY_BLK_SZ	4096
+	/* Try to find DM-verity */
+	dm_off = roundup(squashfs_len, DM_VERITY_BLK_SZ);
+	dm_len = 7;
+	err = mtd_read(master, dm_off, dm_len, &retlen, (void *)&verity);
+	if (err || (retlen != dm_len)) {
+		pr_alert("error occured while reading from \"%s\"\n",
+			 master->name);
+		return -EIO;
+	}
+	if (!strcmp(verity, DM_VERITY_STR)) {
+		int dm_sz;
+
+		dm_sz = roundup(squashfs_len / 128, DM_VERITY_BLK_SZ);
+		dm_sz += DM_VERITY_BLK_SZ * 2;
+		squashfs_len += dm_sz;
+	}
+
 	part = kzalloc(sizeof(*part), GFP_KERNEL);
 	if (!part) {
 		pr_alert("unable to allocate memory for \"%s\" partition\n",
