ext4: fix data corruption for mmap writes
authorJan Kara <jack@suse.cz>
Fri, 26 May 2017 21:45:45 +0000 (17:45 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 26 May 2017 21:45:45 +0000 (17:45 -0400)
commita056bdaae7a181f7dcc876cfab2f94538e508709
tree3ad9b6fbe6df4e031e1a9db45dbfd65214a9b066
parent4f8caa60a5a13a78f26198618f21774bd6aa6498
ext4: fix data corruption for mmap writes

mpage_submit_page() can race with another process growing i_size and
writing data via mmap to the written-back page. As mpage_submit_page()
samples i_size too early, it may happen that ext4_bio_write_page()
zeroes out too large tail of the page and thus corrupts user data.

Fix the problem by sampling i_size only after the page has been
write-protected in page tables by clear_page_dirty_for_io() call.

Reported-by: Michael Zimmer <michael@swarm64.com>
CC: stable@vger.kernel.org
Fixes: cb20d5188366f04d96d2e07b1240cc92170ade40
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inode.c