linux/fs/ext4
Sergey Karamov 3460edfc70 ext4: do not perform data journaling when data is encrypted
commit 73b92a2a5e upstream.

Currently data journalling is incompatible with encryption: enabling both
at the same time has never been supported by design, and would result in
unpredictable behavior. However, users are not precluded from turning on
both features simultaneously. This change programmatically replaces data
journaling for encrypted regular files with ordered data journaling mode.

Background:
Journaling encrypted data has not been supported because it operates on
buffer heads of the page in the page cache. Namely, when the commit
happens, which could be up to five seconds after caching, the commit
thread uses the buffer heads attached to the page to copy the contents of
the page to the journal. With encryption, it would have been required to
keep the bounce buffer with ciphertext for up to the aforementioned five
seconds, since the page cache can only hold plaintext and could not be
used for journaling. Alternatively, it would be required to setup the
journal to initiate a callback at the commit time to perform deferred
encryption - in this case, not only would the data have to be written
twice, but it would also have to be encrypted twice. This level of
complexity was not justified for a mode that in practice is very rarely
used because of the overhead from the data journalling.

Solution:
If data=journaled has been set as a mount option for a filesystem, or if
journaling is enabled on a regular file, do not perform journaling if the
file is also encrypted, instead fall back to the data=ordered mode for the
file.

Rationale:
The intent is to allow seamless and proper filesystem operation when
journaling and encryption have both been enabled, and have these two
conflicting features gracefully resolved by the filesystem.

Fixes: 4461471107
Signed-off-by: Sergey Karamov <skaramov@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-01-06 11:16:13 +01:00
..
acl.c posix_acl: Clear SGID bit when setting file permissions 2016-10-31 04:13:58 -06:00
acl.h ext2/3/4: use generic posix ACL infrastructure 2014-01-25 23:58:19 -05:00
balloc.c ext4: validate s_reserved_gdt_blocks on mount 2016-08-16 09:30:51 +02:00
bitmap.c ext4: remove unused header files 2015-04-02 23:47:42 -04:00
block_validity.c ext4: call out CRC and corruption errors with specific error codes 2015-10-17 16:16:04 -04:00
crypto_fname.c ext4 crypto: replace some BUG_ON()'s with error checks 2015-10-03 10:49:27 -04:00
crypto_key.c ext4 crypto: add missing locking for keyring_key access 2016-02-17 12:31:02 -08:00
crypto_policy.c fscrypto: add authorization check for setting encryption policy 2016-09-24 10:07:34 +02:00
crypto.c ext4: fix an endianness bug in ext4_encrypted_zeroout() 2015-11-26 15:20:19 -05:00
dir.c ext4: clean up feature test macros with predicate functions 2015-10-17 16:18:43 -04:00
ext4_crypto.h ext4 crypto: allocate bounce pages using GFP_NOWAIT 2015-06-03 09:32:39 -04:00
ext4_extents.h ext4: teach ext4_ext_find_extent() to realloc path if necessary 2014-09-01 14:40:09 -04:00
ext4_jbd2.c ext4: fix potential use after free in __ext4_journal_stop 2015-10-17 22:57:06 -04:00
ext4_jbd2.h ext4: do not perform data journaling when data is encrypted 2017-01-06 11:16:13 +01:00
ext4.h ext4: sanity check the block and cluster size at mount time 2016-11-26 09:54:52 +01:00
extents_status.c ext4: move procfs registration code to fs/ext4/sysfs.c 2015-09-23 12:46:17 -04:00
extents_status.h ext4: move procfs registration code to fs/ext4/sysfs.c 2015-09-23 12:46:17 -04:00
extents.c ext4: fix memory leak in ext4_insert_range() 2016-10-22 12:26:56 +02:00
file.c ext4: fix races between page faults and hole punching 2016-05-04 14:48:53 -07:00
fsync.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-04-26 17:22:07 -07:00
hash.c ext4: remove unused header files 2015-04-02 23:47:42 -04:00
ialloc.c ext4: clean up error handling when orphan list is corrupted 2016-06-07 18:14:37 -07:00
indirect.c ext4: clean up feature test macros with predicate functions 2015-10-17 16:18:43 -04:00
inline.c ext4: return -ENOMEM instead of success 2017-01-06 11:16:13 +01:00
inode.c ext4: reject inodes with negative size 2017-01-06 11:16:13 +01:00
ioctl.c fscrypto: require write access to mount to set encryption policy 2016-09-24 10:07:35 +02:00
Kconfig ext4: Update EXT4_USE_FOR_EXT2 description 2015-09-24 13:27:47 +02:00
Makefile ext4: move sysfs code from super.c to fs/ext4/sysfs.c 2015-09-23 12:44:17 -04:00
mballoc.c ext4: fix stack memory corruption with 64k block size 2017-01-06 11:16:12 +01:00
mballoc.h ext4: remove unused ac_ex_scanned 2014-02-20 13:32:10 -05:00
migrate.c ext4: clean up feature test macros with predicate functions 2015-10-17 16:18:43 -04:00
mmp.c ext4: call out CRC and corruption errors with specific error codes 2015-10-17 16:16:04 -04:00
move_extent.c ext4: enforce online defrag restriction for encrypted files 2016-10-22 12:26:56 +02:00
namei.c ext4: release bh in make_indexed_dir 2016-10-22 12:26:56 +02:00
page-io.c ext4 crypto: fix memory leak in ext4_bio_write_page() 2015-10-02 23:54:58 -04:00
readpage.c Merge branch 'akpm' (patches from Andrew) 2015-11-07 14:32:45 -08:00
resize.c ext4: fix potential integer overflow 2016-02-25 12:01:15 -08:00
super.c ext4: do not perform data journaling when data is encrypted 2017-01-06 11:16:13 +01:00
symlink.c ext4: fix an endianness bug in ext4_encrypted_follow_link() 2015-11-26 15:20:50 -05:00
sysfs.c ext4: do not advertise encryption support when disabled 2016-10-28 03:01:35 -04:00
truncate.h ext4: fix races between page faults and hole punching 2016-05-04 14:48:53 -07:00
xattr_security.c xattr handlers: Pass handler to operations instead of flags 2015-11-13 20:34:32 -05:00
xattr_trusted.c xattr handlers: Pass handler to operations instead of flags 2015-11-13 20:34:32 -05:00
xattr_user.c xattr handlers: Pass handler to operations instead of flags 2015-11-13 20:34:32 -05:00
xattr.c ext4: avoid modifying checksum fields directly during checksum verification 2016-09-15 08:27:51 +02:00
xattr.h ext4 crypto: add encryption xattr support 2015-04-11 07:47:00 -04:00