]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit
loop: drop caches if offset or block_size are changed
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 10 Jan 2019 03:17:14 +0000 (19:17 -0800)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Wed, 14 Aug 2019 09:18:49 +0000 (11:18 +0200)
commit0d5e3bffcb7a6bf479fa4d6a34b50b104de980b0
treed1e73e4563c61228e2baf548b01210fae3bed041
parent94c4124c50637f95414b7f89f58cc070ca330ba9
loop: drop caches if offset or block_size are changed

BugLink: https://bugs.launchpad.net/bugs/1837477
commit 5db470e229e22b7eda6e23b5566e532c96fb5bc3 upstream.

If we don't drop caches used in old offset or block_size, we can get old data
from new offset/block_size, which gives unexpected data to user.

For example, Martijn found a loopback bug in the below scenario.
1) LOOP_SET_FD loads first two pages on loop file
2) LOOP_SET_STATUS64 changes the offset on the loop file
3) mount is failed due to the cached pages having wrong superblock

Cc: Jens Axboe <axboe@kernel.dk>
Cc: linux-block@vger.kernel.org
Reported-by: Martijn Coenen <maco@google.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/block/loop.c