summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSalyzyn, Mark <mark_salyzyn@adaptec.com>2007-03-21 18:22:56 +0100
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2007-03-21 18:45:15 +0100
commit20235f35221472f1a127a5d5414f11091eb0a845 (patch)
tree4b827f2e8a8056974fe6cae63cf06b8c31aa1780
parent[SCSI] fix scsi_wait_scan build problem (diff)
downloadlinux-20235f35221472f1a127a5d5414f11091eb0a845.tar.xz
linux-20235f35221472f1a127a5d5414f11091eb0a845.zip
[SCSI] aacraid: check buffer address in aac_internal_transfer
Captured a panic on an older kernel where an application issuing commands via sg was sending requests that lacked a request_buffer, thus the buffer pointer used in aac_internal_transer was NULL. The application was fixed closing the issue, but felt it was advised to immunize the driver against the eventuality. Signed-off-by: Mark Salyzyn <aacraid@adaptec.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r--drivers/scsi/aacraid/aachba.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 0c4e27eb6520..f9deab686dc4 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -350,8 +350,9 @@ static void aac_internal_transfer(struct scsi_cmnd *scsicmd, void *data, unsigne
buf = scsicmd->request_buffer;
transfer_len = min(scsicmd->request_bufflen, len + offset);
}
-
- memcpy(buf + offset, data, transfer_len - offset);
+ transfer_len -= offset;
+ if (buf && transfer_len)
+ memcpy(buf + offset, data, transfer_len);
if (scsicmd->use_sg)
kunmap_atomic(buf - sg->offset, KM_IRQ0);