nbd: don't allow invalid blocksize settings
syzbot reports a divide-by-zero off the NBD_SET_BLKSIZE ioctl. We need proper validation of the input here. Not just if it's zero, but also if the value is a power-of-2 and in a valid range. Add that. Cc: stable@vger.kernel.org Reported-by: syzbot <syzbot+25dbecbec1e62c6b0dd4@syzkaller.appspotmail.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
3111885015
commit
bc811f05d7
|
@ -1239,6 +1239,9 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
|
||||||
case NBD_SET_SOCK:
|
case NBD_SET_SOCK:
|
||||||
return nbd_add_socket(nbd, arg, false);
|
return nbd_add_socket(nbd, arg, false);
|
||||||
case NBD_SET_BLKSIZE:
|
case NBD_SET_BLKSIZE:
|
||||||
|
if (!arg || !is_power_of_2(arg) || arg < 512 ||
|
||||||
|
arg > PAGE_SIZE)
|
||||||
|
return -EINVAL;
|
||||||
nbd_size_set(nbd, arg,
|
nbd_size_set(nbd, arg,
|
||||||
div_s64(config->bytesize, arg));
|
div_s64(config->bytesize, arg));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue