ataflop: potential out of bounds in do_format()
The function uses "type" as an array index:
q = unit[drive].disk[type]->queue;
Unfortunately the bounds check on "type" isn't done until later in the
function. Fix this by moving the bounds check to the start.
Fixes: bf9c0538e4 ("ataflop: use a separate gendisk for each media format")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
committed by
Jens Axboe
parent
6327c911aa
commit
1ffec389a6
@@ -729,8 +729,12 @@ static int do_format(int drive, int type, struct atari_format_descr *desc)
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
if (type)
|
||||
if (type) {
|
||||
type--;
|
||||
if (type >= NUM_DISK_MINORS ||
|
||||
minor2disktype[type].drive_types > DriveType)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
q = unit[drive].disk[type]->queue;
|
||||
blk_mq_freeze_queue(q);
|
||||
@@ -742,11 +746,6 @@ static int do_format(int drive, int type, struct atari_format_descr *desc)
|
||||
local_irq_restore(flags);
|
||||
|
||||
if (type) {
|
||||
if (type >= NUM_DISK_MINORS ||
|
||||
minor2disktype[type].drive_types > DriveType) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
type = minor2disktype[type].index;
|
||||
UDT = &atari_disk_type[type];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user