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