From 5c2272b886372d945016166cb70887b26a939936 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Thu, 27 Jul 2017 10:22:57 +0000 Subject: [PATCH] [EXT2] Import commits by Kaho Ng from upstream: - b7657e5 Ext3Fsd: Introduce VCB_RO_COMPAT_READ_ONLY flag for struct VCB - e7c1142 Ext3Fsd: EXT4_FEATURE_INCOMPAT_64BIT is not supported - 785943f Ext3Fsd: fix issue #6 Refuse mounting filesystems with incompatible flags. This avoids corrupting 64bits filesystems. Patch by Lubomir Rintel CORE-13589 svn path=/trunk/; revision=75422 --- reactos/drivers/filesystems/ext2/inc/ext2fs.h | 2 ++ .../filesystems/ext2/inc/linux/ext3_fs.h | 1 - reactos/drivers/filesystems/ext2/src/memory.c | 19 ++++++++++++------- reactos/media/doc/README.FSD | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/reactos/drivers/filesystems/ext2/inc/ext2fs.h b/reactos/drivers/filesystems/ext2/inc/ext2fs.h index bd5b45d999a..7792ed18ac3 100644 --- a/reactos/drivers/filesystems/ext2/inc/ext2fs.h +++ b/reactos/drivers/filesystems/ext2/inc/ext2fs.h @@ -789,6 +789,7 @@ typedef struct _EXT2_VCB { #define VCB_DEVICE_REMOVED 0x00008000 #define VCB_JOURNAL_RECOVER 0x00080000 #define VCB_ARRIVAL_NOTIFIED 0x00800000 +#define VCB_RO_COMPAT_READ_ONLY 0x01000000 #define VCB_READ_ONLY 0x08000000 #define VCB_WRITE_PROTECTED 0x10000000 #define VCB_FLOPPY_DISK 0x20000000 @@ -800,6 +801,7 @@ typedef struct _EXT2_VCB { #define IsMounted(Vcb) (IsFlagOn((Vcb)->Flags, VCB_MOUNTED)) #define IsDispending(Vcb) (IsFlagOn((Vcb)->Flags, VCB_DISMOUNT_PENDING)) #define IsVcbReadOnly(Vcb) (IsFlagOn((Vcb)->Flags, VCB_READ_ONLY) || \ + IsFlagOn((Vcb)->Flags, VCB_RO_COMPAT_READ_ONLY) || \ IsFlagOn((Vcb)->Flags, VCB_WRITE_PROTECTED)) diff --git a/reactos/drivers/filesystems/ext2/inc/linux/ext3_fs.h b/reactos/drivers/filesystems/ext2/inc/linux/ext3_fs.h index 2d0227df4cb..db79afb199b 100644 --- a/reactos/drivers/filesystems/ext2/inc/linux/ext3_fs.h +++ b/reactos/drivers/filesystems/ext2/inc/linux/ext3_fs.h @@ -720,7 +720,6 @@ static inline int ext3_valid_inum(struct super_block *sb, unsigned long ino) EXT4_FEATURE_INCOMPAT_RECOVER| \ EXT4_FEATURE_INCOMPAT_META_BG| \ EXT4_FEATURE_INCOMPAT_EXTENTS| \ - EXT4_FEATURE_INCOMPAT_64BIT| \ EXT4_FEATURE_INCOMPAT_FLEX_BG) #define EXT4_FEATURE_RO_COMPAT_SUPP ( \ EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \ diff --git a/reactos/drivers/filesystems/ext2/src/memory.c b/reactos/drivers/filesystems/ext2/src/memory.c index 8cd9a9fe4b9..6678579a940 100644 --- a/reactos/drivers/filesystems/ext2/src/memory.c +++ b/reactos/drivers/filesystems/ext2/src/memory.c @@ -2318,17 +2318,22 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext, _SEH2_LEAVE; } - /* checking in/compat features */ - if (IsFlagOn(sb->s_feature_compat, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) { - Vcb->IsExt3fs = TRUE; - } - - /* don't mount any volumes with external journal devices */ - if (IsFlagOn(sb->s_feature_incompat, EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) { + /* Reject mounting volume if we encounter unsupported incompat features */ + if (FlagOn(sb->s_feature_incompat, ~EXT4_FEATURE_INCOMPAT_SUPP)) { Status = STATUS_UNRECOGNIZED_VOLUME; _SEH2_LEAVE; } + /* Mount the volume RO if we encounter unsupported ro_compat features */ + if (FlagOn(sb->s_feature_ro_compat, ~EXT4_FEATURE_RO_COMPAT_SUPP)) { + SetLongFlag(Vcb->Flags, VCB_RO_COMPAT_READ_ONLY); + } + + /* Recognize the filesystem as Ext3fs if it supports journalling */ + if (IsFlagOn(sb->s_feature_compat, EXT4_FEATURE_COMPAT_HAS_JOURNAL)) { + Vcb->IsExt3fs = TRUE; + } + /* check block size */ Vcb->BlockSize = (EXT2_MIN_BLOCK_SIZE << sb->s_log_block_size); /* we cannot handle volume with block size bigger than 64k */ diff --git a/reactos/media/doc/README.FSD b/reactos/media/doc/README.FSD index 16b126c07fa..f73d2c17b28 100644 --- a/reactos/media/doc/README.FSD +++ b/reactos/media/doc/README.FSD @@ -9,7 +9,7 @@ reactos/sdk/lib/fslib/btrfslib # Synced to 0.8 The following FSD are shared with: http://www.ext2fsd.com/ -reactos/drivers/filesystems/ext2 # Synced to 0.68 +reactos/drivers/filesystems/ext2 # Synced to 0.68, with b7657e5, e7c1142, 785943f The following FSD are shared with: http://www.acc.umu.se/~bosse/