Mercurial > illumos > git > illumos-joyent
changeset 24452:4afdede50c0c
12160 libdiskstatus: argument to 'alloca' may be too large
Reviewed by: C Fraire <cfraire@me.com>
Approved by: Dan McDonald <danmcd@joyent.com>
author | Toomas Soome <tsoome@me.com> |
---|---|
date | Sat, 04 Jan 2020 20:16:42 +0200 |
parents | cbea130ad8f1 |
children | 26e87d5dd27f 22899952daac |
files | usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c |
diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c Thu Nov 22 12:01:51 2018 +0200 +++ b/usr/src/lib/fm/libdiskstatus/common/ds_scsi_uscsi.c Sat Jan 04 20:16:42 2020 +0200 @@ -1615,12 +1615,13 @@ 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 @@ 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 @@ 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 @@ sizeof (scsi_log_header_t)); ddump("data:", (caddr_t)hdr + sizeof (scsi_log_header_t), len); + free(log_sense_buf); return (0); }