svn commit: r307684 - head/sbin/camcontrol
Kenneth D. Merry
ken at FreeBSD.org
Thu Oct 20 19:42:27 UTC 2016
Author: ken
Date: Thu Oct 20 19:42:26 2016
New Revision: 307684
URL: https://svnweb.freebsd.org/changeset/base/307684
Log:
For CCBs allocated on the stack, we need to clear the entire CCB, not just
the header. Otherwise stack garbage can lead to random flags getting set.
This showed up as 'camcontrol rescan all' failing with EINVAL because the
address type wasn't CAM_DATA_VADDR.
sbin/camcontrol/camcontrol.c:
In rescan_or_reset_bus(), bzero the stack-allocated CCBs before
use instead of clearing the body.
MFC after: 3 days
Sponsored by: Spectra Logic
Modified:
head/sbin/camcontrol/camcontrol.c
Modified: head/sbin/camcontrol/camcontrol.c
==============================================================================
--- head/sbin/camcontrol/camcontrol.c Thu Oct 20 18:43:12 2016 (r307683)
+++ head/sbin/camcontrol/camcontrol.c Thu Oct 20 19:42:26 2016 (r307684)
@@ -3139,6 +3139,8 @@ rescan_or_reset_bus(path_id_t bus, int r
return(1);
}
+ bzero(&ccb, sizeof(ccb));
+
if (bus != CAM_BUS_WILDCARD) {
ccb.ccb_h.func_code = rescan ? XPT_SCAN_BUS : XPT_RESET_BUS;
ccb.ccb_h.path_id = bus;
@@ -3181,7 +3183,7 @@ rescan_or_reset_bus(path_id_t bus, int r
* no-op, sending a rescan to the xpt bus would result in a status of
* CAM_REQ_INVALID.
*/
- CCB_CLEAR_ALL_EXCEPT_HDR(&matchccb.cdm);
+ bzero(&matchccb, sizeof(matchccb));
matchccb.ccb_h.func_code = XPT_DEV_MATCH;
matchccb.ccb_h.path_id = CAM_BUS_WILDCARD;
bufsize = sizeof(struct dev_match_result) * 20;
More information about the svn-src-all
mailing list