diff options
author | Conrad Meyer <cem@FreeBSD.org> | 2016-11-08 21:17:24 +0000 |
---|---|---|
committer | Conrad Meyer <cem@FreeBSD.org> | 2016-11-08 21:17:24 +0000 |
commit | 8fc77fff81ed32ae03ed910735e06fe15b4c8d0e (patch) | |
tree | 942a1786b0e455b6c5e3045f4037ce61a2ac09bf /sys/cam/cam_xpt.c | |
parent | 199f4e8d689236b7da89f0ce827de8db2af5f790 (diff) | |
download | src-8fc77fff81ed32ae03ed910735e06fe15b4c8d0e.tar.gz src-8fc77fff81ed32ae03ed910735e06fe15b4c8d0e.zip |
cam: Zero bio pointer in user-supplied SCSI CCBs
The BUF_TRACKING bio pointer only makes sense for kernel consumers of
CCBs.
PR: 214250
Reported by: trasz@
Reviewed by: imp@, markj@
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D8477
Notes
Notes:
svn path=/head/; revision=308451
Diffstat (limited to 'sys/cam/cam_xpt.c')
-rw-r--r-- | sys/cam/cam_xpt.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c index 34018052ed60..7a38d745fcf4 100644 --- a/sys/cam/cam_xpt.c +++ b/sys/cam/cam_xpt.c @@ -414,6 +414,10 @@ xptdoioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread * struct cam_eb *bus; inccb = (union ccb *)addr; +#if defined(BUF_TRACKING) || defined(FULL_BUF_TRACKING) + if (inccb->ccb_h.func_code == XPT_SCSI_IO) + inccb->csio.bio = NULL; +#endif bus = xpt_find_bus(inccb->ccb_h.path_id); if (bus == NULL) @@ -593,6 +597,10 @@ xptdoioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread * unit = ccb->cgdl.unit_number; name = ccb->cgdl.periph_name; base_periph_found = 0; +#if defined(BUF_TRACKING) || defined(FULL_BUF_TRACKING) + if (ccb->ccb_h.func_code == XPT_SCSI_IO) + ccb->csio.bio = NULL; +#endif /* * Sanity check -- make sure we don't get a null peripheral |