DragonFlyBSD Kernel Audit
DF-1830 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/disk/iscsi/initiator/isc_soc.c b/sys/dev/disk/iscsi/initiator/isc_soc.c
--- a/sys/dev/disk/iscsi/initiator/isc_soc.c
+++ b/sys/dev/disk/iscsi/initiator/isc_soc.c
@@ -443,11 +443,11 @@
 			 scsi_req_t *cmd		= &opp->ipdu.scsi_req;
 			 data_in_t *rcmd		= &pq->pdu.ipdu.data_in;
 			 bhs_t *bhp			= &opp->ipdu.bhs;
-			 int	r;
 
 			 if(bhp->opcode == ISCSI_SCSI_CMD
 			    && cmd->R
-			    && (ntohl(cmd->edtlen) >= pq->pdu.ds_len)) {
+			    && (ntohl(cmd->edtlen) >= pq->pdu.ds_len)
+				 && (ntohl(rcmd->bo) + pq->pdu.ds_len <= ntohl(cmd->edtlen))) {
 			      struct iovec *iov = pq->iov;
 			      iov->iov_base = csio->data_ptr + ntohl(rcmd->bo);
 			      iov->iov_len = pq->pdu.ds_len;
@@ -457,7 +457,7 @@
 			      uio->uio_iov = iov;
 			      uio->uio_iovcnt = 1;
 			      if(len > pq->pdu.ds_len) {
-				   pq->iov[1].iov_base = &r;
+				   pq->iov[1].iov_base = NULL;
 				   pq->iov[1].iov_len = len - pq->pdu.ds_len;
 				   uio->uio_iovcnt++;
 			      }