-----Original Message-----
From: Dan Carpenter <[email protected]>
Date: Wednesday, 13 November 2013 1:18 pm
To: Vikas <[email protected]>, Adheer Chandravanshi
<[email protected]>
Cc: Dept-Eng iSCSI Driver <[email protected]>, "James E.J.
Bottomley" <[email protected]>, scsi <[email protected]>,
"[email protected]" <[email protected]>
Subject: [patch] [SCSI] qla4xxx: overflow in qla4xxx_set_chap_entry()

>We should cap the size of memcpy() because it comes from the network
>and can't be trusted.

This patch is on assumption that data is coming from network,
but in this case data come from application (iscsiadm) with correct length.


>
>Fixes: 26ffd7b45fe9 ('[SCSI] qla4xxx: Add support to set CHAP entries')
>Signed-off-by: Dan Carpenter <[email protected]>
>
>diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
>index a28d5e6..cf174a4 100644
>--- a/drivers/scsi/qla4xxx/ql4_os.c
>+++ b/drivers/scsi/qla4xxx/ql4_os.c
>@@ -802,6 +802,7 @@ static int qla4xxx_set_chap_entry(struct Scsi_Host
>*shost, void *data, int len)
>       int type;
>       int rem = len;
>       int rc = 0;
>+      int size;
> 
>       memset(&chap_rec, 0, sizeof(chap_rec));
> 
>@@ -816,12 +817,14 @@ static int qla4xxx_set_chap_entry(struct Scsi_Host
>*shost, void *data, int len)
>                       chap_rec.chap_type = param_info->value[0];
>                       break;
>               case ISCSI_CHAP_PARAM_USERNAME:
>-                      memcpy(chap_rec.username, param_info->value,
>-                             param_info->len);
>+                      size = min_t(size_t, sizeof(chap_rec.username),
>+                                   param_info->len);
>+                      memcpy(chap_rec.username, param_info->value, size);
>                       break;
>               case ISCSI_CHAP_PARAM_PASSWORD:
>-                      memcpy(chap_rec.password, param_info->value,
>-                             param_info->len);
>+                      size = min_t(size_t, sizeof(chap_rec.password),
>+                                   param_info->len);
>+                      memcpy(chap_rec.password, param_info->value, size);
>                       break;
>               case ISCSI_CHAP_PARAM_PASSWORD_LEN:
>                       chap_rec.password_length = param_info->value[0];

<<attachment: winmail.dat>>

Reply via email to