Thread (7 messages) 7 messages, 3 authors, 2018-08-08

Re: [PATCH] mm: adjust max read count in generic_file_buffered_read()

From: Jan Kara <jack@suse.cz>
Date: 2018-08-08 08:57:47
Also in: linux-mm, lkml

On Wed 08-08-18 08:57:13, cgxu519 wrote:
On 08/07/2018 09:54 PM, Jan Kara wrote:
quoted
On Mon 06-08-18 15:59:27, Andrew Morton wrote:
quoted
On Mon, 6 Aug 2018 12:22:03 +0200 Jan Kara [off-list ref] wrote:
quoted
On Fri 20-07-18 16:14:29, Andrew Morton wrote:
quoted
On Thu, 19 Jul 2018 10:58:12 +0200 Jan Kara [off-list ref] wrote:
quoted
On Thu 19-07-18 16:17:26, Chengguang Xu wrote:
quoted
When we try to truncate read count in generic_file_buffered_read(),
should deliver (sb->s_maxbytes - offset) as maximum count not
sb->s_maxbytes itself.

Signed-off-by: Chengguang Xu <redacted>
Looks good to me. You can add:

Reviewed-by: Jan Kara <jack@suse.cz>
Yup.

What are the runtime effects of this bug?
Good question. I think ->readpage() could be called for index beyond
maximum file size supported by the filesystem leading to weird filesystem
behavior due to overflows in internal calculations.
Sure.  But is it possible for userspace to trigger this behaviour?
Possibly all callers have already sanitized the arguments by this stage
in which case the statement is arguably redundant.
So I don't think there's any sanitization going on before
generic_file_buffered_read(). E.g. I don't see any s_maxbytes check on
ksys_read() -> vfs_read() -> __vfs_read() -> new_sync_read() ->
call_read_iter() -> generic_file_read_iter() ->
generic_file_buffered_read() path... However now thinking about this again:
We are guaranteed i_size is within s_maxbytes (places modifying i_size
are checking for this) and generic_file_buffered_read() stops when it
should read beyond i_size. So in the end I don't think there's any breakage
possible and the patch is not necessary?
I think most of time i_size is within s_maxbytes in local filesystem,
but consider network filesystem, write big file in 64bit client and
read in 32bit client, in this case maybe generic_file_buffered_read()
can read more than s_maxbytes, right?
I'd consider this an internal problem in the implementation of the
networking filesystem. Not something VFS should care about. It's similar to
a normal filesystem loading corrupted file size from disk...

								Honza
-- 
Jan Kara [off-list ref]
SUSE Labs, CR
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help