freebsd-skq/sys/cam/scsi
ken 0dcea87b65 Fix a potential sleep while holding a mutex in the sa(4) driver.
If the user issues a MTIOCEXTGET ioctl, and the tape drive in question has
a serial number that is longer than 80 characters, we malloc a buffer in
saextget() to hold the output of cam_strvis().

Since a mutex is held in that codepath, doing a M_WAITOK malloc could lead
to sleeping while holding a mutex.  Change it to a M_NOWAIT malloc and bail
out if we fail to allocate the memory.  Devices with serial numbers longer
than 80 bytes are very rare (I don't recall seeing one), so this
should be a very unusual case to hit.  But it is a bug that should be fixed.

sys/cam/scsi/scsi_sa.c:
	In saextget(), if we need to malloc a buffer to hold the output of
	cam_strvis(), don't wait for the memory.  Fail and return an error
	if we can't allocate the memory immediately.

PR:		kern/220094
Submitted by:	Jia-Ju Bai <baijiaju1990@163.com>
MFC after:	3 days
Sponsored by:	Spectra Logic
2017-06-19 20:48:00 +00:00
..
scsi_all.c Don't bother retrying errors for encrypted drives that are locked. 2017-05-03 14:53:27 +00:00
scsi_all.h Add the SCSI Solid State Media Log page (0x11) definition. 2017-05-04 17:23:39 +00:00
scsi_cd.c Add infrastructure to the ATA and SCSI transports that supports 2017-04-19 15:04:52 +00:00
scsi_cd.h Add CD/DVD Capabilities and Mechanical Status Page. 2015-09-29 09:09:37 +00:00
scsi_ch.c Release ccb if mode_buffer allocation fails. 2017-03-28 00:39:41 +00:00
scsi_ch.h sys/cam: spelling fixes in comments. 2016-04-29 21:05:48 +00:00
scsi_da.c Introduce Genesys GL3224 quirks 2017-05-29 09:22:53 +00:00
scsi_da.h Improve support for informational exceptions. 2016-12-19 10:25:47 +00:00
scsi_dvcfg.h
scsi_enc_internal.h Add infrastructure to the ATA and SCSI transports that supports 2017-04-19 15:04:52 +00:00
scsi_enc_safte.c Allow sleepable allocations in enclosure daemon threads. 2016-05-10 16:20:36 +00:00
scsi_enc_ses.c Make SES status updates more aggressive. 2016-11-29 13:48:36 +00:00
scsi_enc.c Add infrastructure to the ATA and SCSI transports that supports 2017-04-19 15:04:52 +00:00
scsi_enc.h Add API to obtain primary enclosure name and ID for /dev/sesX devices. 2015-11-21 10:22:01 +00:00
scsi_iu.h
scsi_low.c Remove dead mentions of CAM target mode APIs from drivers. 2017-02-19 17:27:58 +00:00
scsi_low.h sys/cam: spelling fixes in comments. 2016-04-29 21:05:48 +00:00
scsi_message.h Add partial support for QUERY TMF to CAM and isp(4). 2015-10-23 18:34:18 +00:00
scsi_pass.c Fix error recovery behavior in the pass(4) driver. 2017-05-03 20:59:47 +00:00
scsi_pass.h Add asynchronous command support to the pass(4) driver, and the new 2015-12-03 20:54:55 +00:00
scsi_pt.c Convert sys/cam to use make_dev_s(). 2016-01-07 20:22:55 +00:00
scsi_pt.h
scsi_sa.c Fix a potential sleep while holding a mutex in the sa(4) driver. 2017-06-19 20:48:00 +00:00
scsi_sa.h Add the SCSI SSC Manufacturer assigned serial number VPD page. 2017-05-02 14:52:28 +00:00
scsi_ses.h Add support for EIIOE flag in Additional Element Status. 2016-11-07 18:21:53 +00:00
scsi_sg.c Convert sys/cam to use make_dev_s(). 2016-01-07 20:22:55 +00:00
scsi_sg.h
scsi_targ_bh.c
scsi_target.c Make pass, sg and targ drivers respect HBA's maxio. 2015-09-30 13:31:37 +00:00
scsi_targetio.h
scsi_xpt.c Introduce Genesys GL3224 quirks 2017-05-29 09:22:53 +00:00
smp_all.c sys: use our nitems() macro when param.h is available. 2016-04-21 19:40:10 +00:00
smp_all.h