scsi: qedi: Check for buffer overflow in qedi_set_path()
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 28 Apr 2020 13:19:39 +0000 (16:19 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 30 Apr 2020 02:12:16 +0000 (22:12 -0400)
Smatch complains that the "path_data->handle" variable is user controlled.
It comes from iscsi_set_path() so that seems possible.  It's harmless to
add a limit check.

The qedi->ep_tbl[] array has qedi->max_active_conns elements (which is
always ISCSI_MAX_SESS_PER_HBA (4096) elements).  The array is allocated in
the qedi_cm_alloc_mem() function.

Link: https://lore.kernel.org/r/20200428131939.GA696531@mwanda
Fixes: ace7f46ba5fd ("scsi: qedi: Add QLogic FastLinQ offload iSCSI driver framework.")
Acked-by: Manish Rangankar <mrangankar@marvell.com>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qedi/qedi_iscsi.c

index b867a14..425e665 100644 (file)
@@ -1221,6 +1221,10 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
        }
 
        iscsi_cid = (u32)path_data->handle;
+       if (iscsi_cid >= qedi->max_active_conns) {
+               ret = -EINVAL;
+               goto set_path_exit;
+       }
        qedi_ep = qedi->ep_tbl[iscsi_cid];
        QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
                  "iscsi_cid=0x%x, qedi_ep=%p\n", iscsi_cid, qedi_ep);