[lvm-devel] LVM2/lib/metadata raid_manip.c

jbrassow at sourceware.org jbrassow at sourceware.org
Thu Sep 22 15:33:22 UTC 2011


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	jbrassow at sourceware.org	2011-09-22 15:33:21

Modified files:
	lib/metadata   : raid_manip.c 

Log message:
	When up-converting a RAID1 array, we need to allocate new larger arrays for
	seg->areas and seg->meta_areas.  We also need to copy the memory from the
	old arrays to the newly allocated arrays.  The amount of memory to copy was
	determined by seg->area_count.  However, seg->area_count was being set to the
	higher value after copying the 'seg->areas' information, but before copying
	the 'seg->meta_areas' information.  This means we were copying more memory
	than necessary for 'seg->meta_areas' - something that could lead to a segfault.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/raid_manip.c.diff?cvsroot=lvm2&r1=1.14&r2=1.15

--- LVM2/lib/metadata/raid_manip.c	2011/09/14 09:57:35	1.14
+++ LVM2/lib/metadata/raid_manip.c	2011/09/22 15:33:21	1.15
@@ -499,7 +499,6 @@
 		goto fail;
 	memcpy(new_areas, seg->areas, seg->area_count * sizeof(*seg->areas));
 	seg->areas = new_areas;
-	seg->area_count = new_count;
 
 	/* Expand meta_areas array */
 	if (!(new_areas = dm_pool_zalloc(lv->vg->cmd->mem,
@@ -508,6 +507,7 @@
 	memcpy(new_areas, seg->meta_areas,
 	       seg->area_count * sizeof(*seg->meta_areas));
 	seg->meta_areas = new_areas;
+	seg->area_count = new_count;
 
 	/* Set segment areas for metadata sub_lvs */
 	s = old_count;




More information about the lvm-devel mailing list