diff options
author | mav <mav@FreeBSD.org> | 2014-01-14 12:01:36 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2014-01-14 12:01:36 +0000 |
commit | 204096a62c437bf225d1c682cef7cc4acdbf565b (patch) | |
tree | ad87a260284e40088353372385994534ac0abab7 /sys/cam/cam_xpt.c | |
parent | a7224392fd4991684fae0ef226fb2367cb016c43 (diff) | |
download | FreeBSD-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.c | 4 |
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); |