diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2017-07-25 15:49:55 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2017-07-26 22:09:21 -0400 |
commit | e6fd916a625110d75bd4d15b8488df44cf41c9fc (patch) | |
tree | 2fc0bb5a15efd7fac015f06e5ab7a43526949c17 | |
parent | 722477c4f2c50bc8d800d293a3bc5aa843f16e8d (diff) |
scsi: aacraid: reading out of bounds
"qd.id" comes directly from the copy_from_user() on the line before so
we should verify that it's within bounds.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r-- | drivers/scsi/aacraid/aachba.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index 707ee2f5954d..4591113c49de 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c | |||
@@ -3198,10 +3198,11 @@ static int query_disk(struct aac_dev *dev, void __user *arg) | |||
3198 | return -EBUSY; | 3198 | return -EBUSY; |
3199 | if (copy_from_user(&qd, arg, sizeof (struct aac_query_disk))) | 3199 | if (copy_from_user(&qd, arg, sizeof (struct aac_query_disk))) |
3200 | return -EFAULT; | 3200 | return -EFAULT; |
3201 | if (qd.cnum == -1) | 3201 | if (qd.cnum == -1) { |
3202 | if (qd.id < 0 || qd.id >= dev->maximum_num_containers) | ||
3203 | return -EINVAL; | ||
3202 | qd.cnum = qd.id; | 3204 | qd.cnum = qd.id; |
3203 | else if ((qd.bus == -1) && (qd.id == -1) && (qd.lun == -1)) | 3205 | } else if ((qd.bus == -1) && (qd.id == -1) && (qd.lun == -1)) { |
3204 | { | ||
3205 | if (qd.cnum < 0 || qd.cnum >= dev->maximum_num_containers) | 3206 | if (qd.cnum < 0 || qd.cnum >= dev->maximum_num_containers) |
3206 | return -EINVAL; | 3207 | return -EINVAL; |
3207 | qd.instance = dev->scsi_host_ptr->host_no; | 3208 | qd.instance = dev->scsi_host_ptr->host_no; |