summaryrefslogtreecommitdiffstats
path: root/sys/cam/cam_xpt.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-01-14 12:01:36 +0000
committermav <mav@FreeBSD.org>2014-01-14 12:01:36 +0000
commit204096a62c437bf225d1c682cef7cc4acdbf565b (patch)
treead87a260284e40088353372385994534ac0abab7 /sys/cam/cam_xpt.c
parenta7224392fd4991684fae0ef226fb2367cb016c43 (diff)
downloadFreeBSD-src-204096a62c437bf225d1c682cef7cc4acdbf565b.zip
FreeBSD-src-204096a62c437bf225d1c682cef7cc4acdbf565b.tar.gz
MFC r260541, r260547:
Take additional reference on SCSI probe periph to cover its freeze count. Otherwise periph may be invalidated and freed before single-stepping freeze is dropped, causing use after free panic.
Diffstat (limited to 'sys/cam/cam_xpt.c')
-rw-r--r--sys/cam/cam_xpt.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index 86e2f5e..63bac64 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -3154,9 +3154,7 @@ restart:
}
if (periph->flags & CAM_PERIPH_RUN_TASK)
break;
- xpt_lock_buses();
- periph->refcount++; /* Unconditionally acquire */
- xpt_unlock_buses();
+ cam_periph_doacquire(periph);
periph->flags |= CAM_PERIPH_RUN_TASK;
taskqueue_enqueue(xsoftc.xpt_taskq,
&periph->periph_run_task);
OpenPOWER on IntegriCloud