--- /dev/null
+From b9dd46188edc2f0d1f37328637860bb65a771124 Mon Sep 17 00:00:00 2001
+From: Jin Qian <jinqian@google.com>
+Date: Tue, 25 Apr 2017 16:28:48 -0700
+Subject: f2fs: sanity check segment count
+
+From: Jin Qian <jinqian@google.com>
+
+commit b9dd46188edc2f0d1f37328637860bb65a771124 upstream.
+
+F2FS uses 4 bytes to represent block address. As a result, supported
+size of disk is 16 TB and it equals to 16 * 1024 * 1024 / 2 segments.
+
+Signed-off-by: Jin Qian <jinqian@google.com>
+Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/f2fs/super.c | 7 +++++++
+ include/linux/f2fs_fs.h | 6 ++++++
+ 2 files changed, 13 insertions(+)
+
+--- a/fs/f2fs/super.c
++++ b/fs/f2fs/super.c
+@@ -1059,6 +1059,13 @@ static int sanity_check_raw_super(struct
+ return 1;
+ }
+
++ if (le32_to_cpu(raw_super->segment_count) > F2FS_MAX_SEGMENT) {
++ f2fs_msg(sb, KERN_INFO,
++ "Invalid segment count (%u)",
++ le32_to_cpu(raw_super->segment_count));
++ return 1;
++ }
++
+ /* check CP/SIT/NAT/SSA/MAIN_AREA area boundary */
+ if (sanity_check_area_boundary(sb, raw_super))
+ return 1;
+--- a/include/linux/f2fs_fs.h
++++ b/include/linux/f2fs_fs.h
+@@ -284,6 +284,12 @@ struct f2fs_nat_block {
+ #define SIT_ENTRY_PER_BLOCK (PAGE_CACHE_SIZE / sizeof(struct f2fs_sit_entry))
+
+ /*
++ * F2FS uses 4 bytes to represent block address. As a result, supported size of
++ * disk is 16 TB and it equals to 16 * 1024 * 1024 / 2 segments.
++ */
++#define F2FS_MAX_SEGMENT ((16 * 1024 * 1024) / 2)
++
++/*
+ * Note that f2fs_sit_entry->vblocks has the following bit-field information.
+ * [15:10] : allocation type such as CURSEG_XXXX_TYPE
+ * [9:0] : valid block count