]> git.baikalelectronics.ru Git - kernel.git/commit
block: fix get_max_segment_size() overflow on 32bit arch
authorMing Lei <ming.lei@redhat.com>
Sat, 11 Jan 2020 12:57:43 +0000 (20:57 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 14 Jan 2020 20:37:40 +0000 (13:37 -0700)
commitc83d5d5d294da7e558ae5c9f8dc4a68356f0e42d
tree8ff8c6a1e1c0311dba3b81a9482dc5ea87ed456f
parent7435ee0ca320efb593d556671b3200639b7b3290
block: fix get_max_segment_size() overflow on 32bit arch

Commit 194d9db5b324 starts to take account of segment's start dma address
when computing max segment size, and data type of 'unsigned long'
is used to do that. However, the segment mask may be 0xffffffff, so
the figured out segment size may be overflowed in case of zero physical
address on 32bit arch.

Fix the issue by returning queue_max_segment_size() directly when that
happens.

Fixes: 194d9db5b324 ("block: fix splitting segments on boundary masks")
Reported-by: Guenter Roeck <linux@roeck-us.net>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Cc: Christoph Hellwig <hch@lst.de>
Tested-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-merge.c