]> git.baikalelectronics.ru Git - kernel.git/commit
loop: loop_set_status_from_info() check before assignment
authorZhong Jinghua <zhongjinghua@huawei.com>
Tue, 21 Feb 2023 09:50:27 +0000 (17:50 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 12:55:30 +0000 (13:55 +0100)
commit07cff0b92b767a577f141f98e026171f73ce1dfa
treefe7e2e5309e8653113ed4bb22644505b3fc6e640
parent07f813fdd83ee30d6cce83c8d512ec95fdb13e90
loop: loop_set_status_from_info() check before assignment

[ Upstream commit a5cc3b1f5c01125101b166e470ac195182efe4a9 ]

In loop_set_status_from_info(), lo->lo_offset and lo->lo_sizelimit should
be checked before reassignment, because if an overflow error occurs, the
original correct value will be changed to the wrong value, and it will not
be changed back.

More, the original patch did not solve the problem, the value was set and
ioctl returned an error, but the subsequent io used the value in the loop
driver, which still caused an alarm:

loop_handle_cmd
 do_req_filebacked
  loff_t pos = ((loff_t) blk_rq_pos(rq) << 9) + lo->lo_offset;
  lo_rw_aio
   cmd->iocb.ki_pos = pos

Fixes: c2125615ce0f ("loop: Check for overflow while configuring loop")
Signed-off-by: Zhong Jinghua <zhongjinghua@huawei.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://lore.kernel.org/r/20230221095027.3656193-1-zhongjinghua@huaweicloud.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/block/loop.c