| From 8f3fafc9c2f0ece10832c25f7ffcb07c97a32ad4 Mon Sep 17 00:00:00 2001 |
| From: Scott Bauer <scott.bauer@intel.com> |
| Date: Thu, 26 Apr 2018 11:51:08 -0600 |
| Subject: cdrom: Fix info leak/OOB read in cdrom_ioctl_drive_status |
| |
| From: Scott Bauer <scott.bauer@intel.com> |
| |
| commit 8f3fafc9c2f0ece10832c25f7ffcb07c97a32ad4 upstream. |
| |
| Like d88b6d04: "cdrom: information leak in cdrom_ioctl_media_changed()" |
| |
| There is another cast from unsigned long to int which causes |
| a bounds check to fail with specially crafted input. The value is |
| then used as an index in the slot array in cdrom_slot_status(). |
| |
| Signed-off-by: Scott Bauer <scott.bauer@intel.com> |
| Signed-off-by: Scott Bauer <sbauer@plzdonthack.me> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/cdrom/cdrom.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/cdrom/cdrom.c |
| +++ b/drivers/cdrom/cdrom.c |
| @@ -2542,7 +2542,7 @@ static int cdrom_ioctl_drive_status(stru |
| if (!CDROM_CAN(CDC_SELECT_DISC) || |
| (arg == CDSL_CURRENT || arg == CDSL_NONE)) |
| return cdi->ops->drive_status(cdi, CDSL_CURRENT); |
| - if (((int)arg >= cdi->capacity)) |
| + if (arg >= cdi->capacity) |
| return -EINVAL; |
| return cdrom_slot_status(cdi, arg); |
| } |