udf: Fix races with i_size changes during readpage
authorJan Kara <jack@suse.cz>
Tue, 13 Jun 2017 13:54:58 +0000 (15:54 +0200)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 12 Oct 2017 14:27:10 +0000 (15:27 +0100)
commitd18777048c7596577023f9ff3ea5dd8e9ff81f7d
tree4cfa1d7bea85b7fb3fb3291b424019a6398fdee0
parent4c99d233b2d0f847332c676cc31b03bd9225d2c5
udf: Fix races with i_size changes during readpage

commit 9795e0e8ac0d6a3ee092f1b555b284b57feef99e upstream.

__udf_adinicb_readpage() uses i_size several times. When truncate
changes i_size while the function is running, it can observe several
different values and thus e.g. expose uninitialized parts of page to
userspace. Also use i_size_read() in the function since it does not hold
inode_lock. Since i_size is guaranteed to be small, this cannot really
cause any issues even on 32-bit archs but let's be careful.

Fixes: 9c2fc0de1a6e638fe58c354a463f544f42a90a09
Signed-off-by: Jan Kara <jack@suse.cz>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
fs/udf/file.c