summaryrefslogtreecommitdiff
path: root/usr/src/lib/fm
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2020-01-04 20:16:42 +0200
committerToomas Soome <tsoome@me.com>2020-01-09 10:31:39 +0200
commit77ac0eaaa1298f1119c62575dcdb2003d56e0994 (patch)
tree203800709f14bfbb910ba74d36aee5922956b279 /usr/src/lib/fm
parent7e536b59b5c21c385f301967cb3b7e31d307d131 (diff)
downloadillumos-gate-77ac0eaaa1298f1119c62575dcdb2003d56e0994.tar.gz
12160 libdiskstatus: argument to 'alloca' may be too large
Reviewed by: C Fraire <cfraire@me.com> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib/fm')
-rw-r--r--usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c b/usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c
index 1c73c959ea..3211e65dfc 100644
--- a/usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c
+++ b/usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c
@@ -1615,12 +1615,13 @@ uscsi_log_sense(int fd, int page_code, int page_control, caddr_t page_data,
if (page_size < sizeof (scsi_log_header_t))
return (-1);
- log_sense_buf = alloca((uint_t)page_size);
+ log_sense_buf = calloc(1, page_size);
+ if (log_sense_buf == NULL)
+ return (-1);
/*
* Build and execute the uscsi ioctl
*/
- (void) memset(log_sense_buf, 0, page_size);
(void) memset((char *)&ucmd, 0, sizeof (ucmd));
(void) memset((char *)&cdb, 0, sizeof (union scsi_cdb));
cdb.scc_cmd = SCMD_LOG_SENSE_G1;
@@ -1633,6 +1634,7 @@ uscsi_log_sense(int fd, int page_code, int page_control, caddr_t page_data,
status = uscsi_cmd(fd, &ucmd, rqbuf, rqblen);
if (status) {
dprintf("Log sense page 0x%x failed\n", page_code);
+ free(log_sense_buf);
return (-1);
}
@@ -1651,6 +1653,7 @@ uscsi_log_sense(int fd, int page_code, int page_control, caddr_t page_data,
dprintf("\nLog sense page 0x%x: incorrect page code 0x%x\n",
page_code, hdr->lh_code);
ddump("Log sense:", log_sense_buf, page_size);
+ free(log_sense_buf);
return (-1);
}
@@ -1672,6 +1675,7 @@ uscsi_log_sense(int fd, int page_code, int page_control, caddr_t page_data,
sizeof (scsi_log_header_t));
ddump("data:", (caddr_t)hdr +
sizeof (scsi_log_header_t), len);
+ free(log_sense_buf);
return (0);
}