mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
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:
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];
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user