svn commit: r220196 - projects/graid/head/sys/geom/raid

Alexander Motin mav at FreeBSD.org
Thu Mar 31 13:28:34 UTC 2011


Author: mav
Date: Thu Mar 31 13:28:33 2011
New Revision: 220196
URL: http://svn.freebsd.org/changeset/base/220196

Log:
  Some string constants in metadata are not zero-terminated. Correct sizes
  when using sizeof() on string constants.
  
  Found with:	Coverity Prevent(tm)
  CID:		9705, 9706, 9707, 9808, 9809, 9810

Modified:
  projects/graid/head/sys/geom/raid/md_intel.c
  projects/graid/head/sys/geom/raid/md_nvidia.c
  projects/graid/head/sys/geom/raid/md_promise.c

Modified: projects/graid/head/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_intel.c	Thu Mar 31 13:22:12 2011	(r220195)
+++ projects/graid/head/sys/geom/raid/md_intel.c	Thu Mar 31 13:28:33 2011	(r220196)
@@ -541,9 +541,9 @@ intel_meta_write_spare(struct g_consumer
 
 	/* Fill anchor and single disk. */
 	meta = malloc(INTEL_MAX_MD_SIZE(1), M_MD_INTEL, M_WAITOK | M_ZERO);
-	memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC));
+	memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC) - 1);
 	memcpy(&meta->version[0], INTEL_VERSION_1000,
-	    sizeof(INTEL_VERSION_1000));
+	    sizeof(INTEL_VERSION_1000) - 1);
 	meta->config_size = INTEL_MAX_MD_SIZE(1);
 	meta->config_id = arc4random();
 	meta->generation = 1;
@@ -2049,7 +2049,7 @@ g_raid_md_write_intel(struct g_raid_md_o
 	/* Fill anchor and disks. */
 	meta = malloc(INTEL_MAX_MD_SIZE(numdisks),
 	    M_MD_INTEL, M_WAITOK | M_ZERO);
-	memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC));
+	memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC) - 1);
 	meta->config_size = INTEL_MAX_MD_SIZE(numdisks);
 	meta->config_id = mdi->mdio_config_id;
 	meta->generation = mdi->mdio_generation;
@@ -2214,7 +2214,7 @@ g_raid_md_write_intel(struct g_raid_md_o
 	meta->total_volumes = vi;
 	if (strcmp(version, INTEL_VERSION_1300) != 0)
 		meta->attributes &= INTEL_ATTR_CHECKSUM;
-	memcpy(&meta->version[0], version, sizeof(INTEL_VERSION_1000));
+	memcpy(&meta->version[0], version, sizeof(INTEL_VERSION_1000) - 1);
 
 	/* We are done. Print meta data and store them to disks. */
 	g_raid_md_intel_print(meta);

Modified: projects/graid/head/sys/geom/raid/md_nvidia.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_nvidia.c	Thu Mar 31 13:22:12 2011	(r220195)
+++ projects/graid/head/sys/geom/raid/md_nvidia.c	Thu Mar 31 13:28:33 2011	(r220196)
@@ -1435,7 +1435,7 @@ g_raid_md_write_nvidia(struct g_raid_md_
 	meta = malloc(sizeof(*meta), M_MD_NVIDIA, M_WAITOK | M_ZERO);
 	if (mdi->mdio_meta)
 		memcpy(meta, mdi->mdio_meta, sizeof(*meta));
-	memcpy(meta->nvidia_id, NVIDIA_MAGIC, sizeof(NVIDIA_MAGIC));
+	memcpy(meta->nvidia_id, NVIDIA_MAGIC, sizeof(NVIDIA_MAGIC) - 1);
 	meta->config_size = 30;
 	meta->version = 0x0064;
 	meta->total_sectors = vol->v_mediasize / vol->v_sectorsize;

Modified: projects/graid/head/sys/geom/raid/md_promise.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_promise.c	Thu Mar 31 13:22:12 2011	(r220195)
+++ projects/graid/head/sys/geom/raid/md_promise.c	Thu Mar 31 13:28:33 2011	(r220196)
@@ -398,7 +398,8 @@ next:
 	    &off, &size)) {
 		/* Optionally add record for unused space. */
 		meta = (struct promise_raid_conf *)buf;
-		memcpy(&meta->promise_id[0], PROMISE_MAGIC, sizeof(PROMISE_MAGIC));
+		memcpy(&meta->promise_id[0], PROMISE_MAGIC,
+		    sizeof(PROMISE_MAGIC) - 1);
 		meta->dummy_0 = 0x00020000;
 		meta->integrity = PROMISE_I_VALID;
 		meta->disk.flags = PROMISE_F_ONLINE | PROMISE_F_VALID;
@@ -462,7 +463,7 @@ promise_meta_write_spare(struct g_consum
 	int error;
 
 	meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK | M_ZERO);
-	memcpy(&meta->promise_id[0], PROMISE_MAGIC, sizeof(PROMISE_MAGIC));
+	memcpy(&meta->promise_id[0], PROMISE_MAGIC, sizeof(PROMISE_MAGIC) - 1);
 	meta->dummy_0 = 0x00020000;
 	meta->integrity = PROMISE_I_VALID;
 	meta->disk.flags = PROMISE_F_SPARE | PROMISE_F_ONLINE | PROMISE_F_VALID;
@@ -1684,7 +1685,8 @@ g_raid_md_write_promise(struct g_raid_md
 		meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK | M_ZERO);
 		if (pv->pv_meta != NULL)
 			memcpy(meta, pv->pv_meta, sizeof(*meta));
-		memcpy(meta->promise_id, PROMISE_MAGIC, sizeof(PROMISE_MAGIC));
+		memcpy(meta->promise_id, PROMISE_MAGIC,
+		    sizeof(PROMISE_MAGIC) - 1);
 		meta->dummy_0 = 0x00020000;
 		meta->integrity = PROMISE_I_VALID;
 


More information about the svn-src-projects mailing list