Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Sep 2009 02:23:16 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r197213 - stable/7/sys/cam
Message-ID:  <200909150223.n8F2NGeu073047@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Tue Sep 15 02:23:16 2009
New Revision: 197213
URL: http://svn.freebsd.org/changeset/base/197213

Log:
  MFC r195685:
  
  Fix leaks in probestart, probedone, and scsi_scan_bus.  Also free
  page_list using the matching malloc type for the allocation.
  
  (In HEAD these functions have moved to scsi_xpt.c)
  
  Reviewed by:	scottl

Modified:
  stable/7/sys/cam/cam_xpt.c

Modified: stable/7/sys/cam/cam_xpt.c
==============================================================================
--- stable/7/sys/cam/cam_xpt.c	Tue Sep 15 02:22:57 2009	(r197212)
+++ stable/7/sys/cam/cam_xpt.c	Tue Sep 15 02:23:16 2009	(r197213)
@@ -5240,6 +5240,7 @@ xpt_scan_bus(struct cam_periph *periph, 
 			}
 			work_ccb = xpt_alloc_ccb_nowait();
 			if (work_ccb == NULL) {
+				xpt_free_ccb((union ccb *)scan_info->cpi);
 				free(scan_info, M_CAMXPT);
 				xpt_free_path(path);
 				request_ccb->ccb_h.status = CAM_RESRC_UNAVAIL;
@@ -5360,6 +5361,7 @@ xpt_scan_bus(struct cam_periph *periph, 
 			}
 
 			if ((scan_info->cpi->hba_misc & PIM_SEQSCAN) == 0) {
+				xpt_free_ccb(request_ccb);
 				break;
 			}
 			status = xpt_create_path(&path, xpt_periph,
@@ -5828,8 +5830,11 @@ probestart(struct cam_periph *periph, un
 
 		serial_buf = NULL;
 		device = periph->path->device;
-		device->serial_num = NULL;
-		device->serial_num_len = 0;
+		if (device->serial_num != NULL) {
+			free(device->serial_num, M_CAMXPT);
+			device->serial_num = NULL;
+			device->serial_num_len = 0;
+		}
 
 		serial_buf = (struct scsi_vpd_unit_serial_number *)
 			malloc(sizeof(*serial_buf), M_CAMXPT, M_NOWAIT|M_ZERO);
@@ -6168,7 +6173,7 @@ probedone(struct cam_periph *periph, uni
 		}
 
 		if (page_list != NULL)
-			free(page_list, M_DEVBUF);
+			free(page_list, M_CAMXPT);
 
 		if (serialnum_supported) {
 			xpt_release_ccb(done_ccb);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200909150223.n8F2NGeu073047>