($INBOX_DIR/description missing)
 help / color / Atom feed
* [e2fsprogs PATCH] Support the stable_inodes feature
@ 2019-10-21 23:30 Eric Biggers
  2019-10-31 23:41 ` Theodore Y. Ts'o
  0 siblings, 1 reply; 2+ messages in thread
From: Eric Biggers @ 2019-10-21 23:30 UTC (permalink / raw)
  To: linux-ext4
  Cc: linux-fscrypt, Satya Tangirala, Paul Crowley, Paul Lawrence,
	Theodore Y . Ts'o, Jaegeuk Kim

From: Eric Biggers <ebiggers@google.com>

Reserve the codepoint for EXT4_FEATURE_COMPAT_STABLE_INODES, allow it to
be set and cleared, and teach resize2fs to forbid shrinking the
filesystem if it is set.

This feature will allow the use of encryption policies where the inode
number is included in the IVs (initialization vectors) for encryption,
so data would be corrupted if the inodes were to be renumbered.

For more details, see the kernel patchset:
https://lkml.kernel.org/linux-fsdevel/20191021230355.23136-1-ebiggers@kernel.org/T/#u

Signed-off-by: Eric Biggers <ebiggers@google.com>
---
 lib/e2p/feature.c    | 2 ++
 lib/ext2fs/ext2_fs.h | 2 ++
 lib/ext2fs/ext2fs.h  | 3 ++-
 misc/mke2fs.c        | 3 ++-
 misc/tune2fs.c       | 6 ++++--
 resize/main.c        | 6 ++++++
 6 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/lib/e2p/feature.c b/lib/e2p/feature.c
index ae7f7f0a..ad0d7f82 100644
--- a/lib/e2p/feature.c
+++ b/lib/e2p/feature.c
@@ -47,6 +47,8 @@ static struct feature feature_list[] = {
 			"sparse_super2" },
 	{	E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_FAST_COMMIT,
 			"fast_commit" },
+	{	E2P_FEATURE_COMPAT, EXT4_FEATURE_COMPAT_STABLE_INODES,
+			"stable_inodes" },
 
 	{	E2P_FEATURE_RO_INCOMPAT, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER,
 			"sparse_super" },
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
index febcb476..3165b389 100644
--- a/lib/ext2fs/ext2_fs.h
+++ b/lib/ext2fs/ext2_fs.h
@@ -811,6 +811,7 @@ struct ext2_super_block {
 #define EXT2_FEATURE_COMPAT_EXCLUDE_BITMAP	0x0100
 #define EXT4_FEATURE_COMPAT_SPARSE_SUPER2	0x0200
 #define EXT4_FEATURE_COMPAT_FAST_COMMIT		0x0400
+#define EXT4_FEATURE_COMPAT_STABLE_INODES	0x0800
 
 
 #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER	0x0001
@@ -913,6 +914,7 @@ EXT4_FEATURE_COMPAT_FUNCS(lazy_bg,		2, LAZY_BG)
 EXT4_FEATURE_COMPAT_FUNCS(exclude_bitmap,	2, EXCLUDE_BITMAP)
 EXT4_FEATURE_COMPAT_FUNCS(sparse_super2,	4, SPARSE_SUPER2)
 EXT4_FEATURE_COMPAT_FUNCS(fast_commit,		4, FAST_COMMIT)
+EXT4_FEATURE_COMPAT_FUNCS(stable_inodes,	4, STABLE_INODES)
 
 EXT4_FEATURE_RO_COMPAT_FUNCS(sparse_super,	2, SPARSE_SUPER)
 EXT4_FEATURE_RO_COMPAT_FUNCS(large_file,	2, LARGE_FILE)
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index 334944d9..a5ed10fc 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -612,7 +612,8 @@ typedef struct ext2_icount *ext2_icount_t;
 					 EXT2_FEATURE_COMPAT_DIR_INDEX|\
 					 EXT2_FEATURE_COMPAT_EXT_ATTR|\
 					 EXT4_FEATURE_COMPAT_SPARSE_SUPER2|\
-					 EXT4_FEATURE_COMPAT_FAST_COMMIT)
+					 EXT4_FEATURE_COMPAT_FAST_COMMIT|\
+					 EXT4_FEATURE_COMPAT_STABLE_INODES)
 
 #ifdef CONFIG_MMP
 #define EXT4_LIB_INCOMPAT_MMP		EXT4_FEATURE_INCOMPAT_MMP
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index fe495844..ffea8233 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -1144,7 +1144,8 @@ static __u32 ok_features[3] = {
 		EXT2_FEATURE_COMPAT_DIR_INDEX |
 		EXT2_FEATURE_COMPAT_EXT_ATTR |
 		EXT4_FEATURE_COMPAT_SPARSE_SUPER2 |
-		EXT4_FEATURE_COMPAT_FAST_COMMIT,
+		EXT4_FEATURE_COMPAT_FAST_COMMIT |
+		EXT4_FEATURE_COMPAT_STABLE_INODES,
 	/* Incompat */
 	EXT2_FEATURE_INCOMPAT_FILETYPE|
 		EXT3_FEATURE_INCOMPAT_EXTENTS|
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
index 39fce4a9..c11e7452 100644
--- a/misc/tune2fs.c
+++ b/misc/tune2fs.c
@@ -150,7 +150,8 @@ static __u32 ok_features[3] = {
 	/* Compat */
 	EXT3_FEATURE_COMPAT_HAS_JOURNAL |
 		EXT2_FEATURE_COMPAT_DIR_INDEX |
-		EXT4_FEATURE_COMPAT_FAST_COMMIT,
+		EXT4_FEATURE_COMPAT_FAST_COMMIT |
+		EXT4_FEATURE_COMPAT_STABLE_INODES,
 	/* Incompat */
 	EXT2_FEATURE_INCOMPAT_FILETYPE |
 		EXT3_FEATURE_INCOMPAT_EXTENTS |
@@ -180,7 +181,8 @@ static __u32 clear_ok_features[3] = {
 	EXT3_FEATURE_COMPAT_HAS_JOURNAL |
 		EXT2_FEATURE_COMPAT_RESIZE_INODE |
 		EXT2_FEATURE_COMPAT_DIR_INDEX |
-		EXT4_FEATURE_COMPAT_FAST_COMMIT,
+		EXT4_FEATURE_COMPAT_FAST_COMMIT |
+		EXT4_FEATURE_COMPAT_STABLE_INODES,
 	/* Incompat */
 	EXT2_FEATURE_INCOMPAT_FILETYPE |
 		EXT4_FEATURE_INCOMPAT_FLEX_BG |
diff --git a/resize/main.c b/resize/main.c
index a0c31c06..cb0bf6a0 100644
--- a/resize/main.c
+++ b/resize/main.c
@@ -605,6 +605,12 @@ int main (int argc, char ** argv)
 		fprintf(stderr, _("The filesystem is already 32-bit.\n"));
 		exit(0);
 	}
+	if (new_size < ext2fs_blocks_count(fs->super) &&
+	    ext2fs_has_feature_stable_inodes(fs->super)) {
+		fprintf(stderr, _("Cannot shrink this filesystem "
+			"because it has the stable_inodes feature flag.\n"));
+		exit(1);
+	}
 	if (mount_flags & EXT2_MF_MOUNTED) {
 		retval = online_resize_fs(fs, mtpt, &new_size, flags);
 	} else {
-- 
2.23.0.866.gb869b98d4c-goog

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [e2fsprogs PATCH] Support the stable_inodes feature
  2019-10-21 23:30 [e2fsprogs PATCH] Support the stable_inodes feature Eric Biggers
@ 2019-10-31 23:41 ` Theodore Y. Ts'o
  0 siblings, 0 replies; 2+ messages in thread
From: Theodore Y. Ts'o @ 2019-10-31 23:41 UTC (permalink / raw)
  To: Eric Biggers
  Cc: linux-ext4, linux-fscrypt, Satya Tangirala, Paul Crowley,
	Paul Lawrence, Jaegeuk Kim

On Mon, Oct 21, 2019 at 04:30:43PM -0700, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
> 
> Reserve the codepoint for EXT4_FEATURE_COMPAT_STABLE_INODES, allow it to
> be set and cleared, and teach resize2fs to forbid shrinking the
> filesystem if it is set.
> 
> This feature will allow the use of encryption policies where the inode
> number is included in the IVs (initialization vectors) for encryption,
> so data would be corrupted if the inodes were to be renumbered.
> 
> For more details, see the kernel patchset:
> https://lkml.kernel.org/linux-fsdevel/20191021230355.23136-1-ebiggers@kernel.org/T/#u
> 
> Signed-off-by: Eric Biggers <ebiggers@google.com>

Thanks, I've applied this as an AOSP cherry-pick.  (I've also
synchronized the upstream e2fsprogs git repo with the AOSP e2fsprogs
repo as of 43f6f573dd61 and updated go/aosp-e2fsprogs-reconciliation.
This commit is on the master branch, although the other AOSP commits,
being bug fixes, were landed first on the maint branch and then merged
into master.)

					- Ted

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, back to index

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-21 23:30 [e2fsprogs PATCH] Support the stable_inodes feature Eric Biggers
2019-10-31 23:41 ` Theodore Y. Ts'o

($INBOX_DIR/description missing)

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-fscrypt/0 linux-fscrypt/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-fscrypt linux-fscrypt/ https://lore.kernel.org/linux-fscrypt \
		linux-fscrypt@vger.kernel.org
	public-inbox-index linux-fscrypt

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-fscrypt


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git