linux/fs/f2fs
Chao Yu 78682f7944 f2fs: fix to avoid reading out encrypted data in page cache
For encrypted inode, if user overwrites data of the inode, f2fs will read
encrypted data into page cache, and then do the decryption.

However reader can race with overwriter, and it will see encrypted data
which has not been decrypted by overwriter yet. Fix it by moving decrypting
work to background and keep page non-uptodated until data is decrypted.

Thread A				Thread B
- f2fs_file_write_iter
 - __generic_file_write_iter
  - generic_perform_write
   - f2fs_write_begin
    - f2fs_submit_page_bio
					- generic_file_read_iter
					 - do_generic_file_read
					  - lock_page_killable
					  - unlock_page
					  - copy_page_to_iter
					  hit the encrypted data in updated page
    - lock_page
    - fscrypt_decrypt_page

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2016-07-08 10:33:24 -07:00
..
acl.c f2fs: call mark_inode_dirty_sync for i_field changes 2016-06-02 18:05:11 -07:00
acl.h f2fs: avoid deadlock on init_inode_metadata 2014-11-03 16:07:33 -08:00
checkpoint.c f2fs: produce more nids and reduce readahead nats 2016-07-06 10:44:08 -07:00
data.c f2fs: fix to avoid reading out encrypted data in page cache 2016-07-08 10:33:24 -07:00
debug.c f2fs: flush inode metadata when checkpoint is doing 2016-06-02 18:05:11 -07:00
dir.c f2fs: call update_inode_page for orphan inodes 2016-07-06 10:44:07 -07:00
extent_cache.c f2fs: remove syncing inode page in all the cases 2016-06-02 18:05:12 -07:00
f2fs.h f2fs: produce more nids and reduce readahead nats 2016-07-06 10:44:08 -07:00
file.c f2fs: avoid latency-critical readahead of node pages 2016-07-06 10:44:10 -07:00
gc.c f2fs: skip clean segment for gc 2016-06-08 10:25:52 -07:00
gc.h f2fs: detect idle time depending on user behavior 2016-01-11 15:56:37 -08:00
hash.c f2fs: introduce dot and dotdot name check 2015-05-28 15:41:34 -07:00
inline.c f2fs: find parent dentry correctly 2016-06-15 15:32:35 -07:00
inode.c f2fs: call update_inode_page for orphan inodes 2016-07-06 10:44:07 -07:00
Kconfig f2fs: add mount option to select fault injection ratio 2016-05-07 10:32:22 -07:00
Makefile fs crypto: move per-file encryption from f2fs tree to fs/crypto 2016-03-17 21:19:33 -07:00
namei.c f2fs: call update_inode_page for orphan inodes 2016-07-06 10:44:07 -07:00
node.c f2fs: produce more nids and reduce readahead nats 2016-07-06 10:44:08 -07:00
node.h f2fs: produce more nids and reduce readahead nats 2016-07-06 10:44:08 -07:00
recovery.c f2fs: introduce mode=lfs mount option 2016-06-13 11:55:21 -07:00
segment.c f2fs: produce more nids and reduce readahead nats 2016-07-06 10:44:08 -07:00
segment.h f2fs: avoid writing node/metapages during writes 2016-07-06 10:44:09 -07:00
shrinker.c f2fs: produce more nids and reduce readahead nats 2016-07-06 10:44:08 -07:00
super.c f2fs: detect host-managed SMR by feature flag 2016-07-06 10:44:07 -07:00
trace.c f2fs: trace old block address for CoWed page 2016-02-22 21:40:02 -08:00
trace.h f2fs: add sbi and page pointer in f2fs_io_info 2015-05-28 15:41:32 -07:00
xattr.c f2fs: remove syncing inode page in all the cases 2016-06-02 18:05:12 -07:00
xattr.h f2fs: add missing argument to f2fs_setxattr stub 2016-03-17 21:19:47 -07:00