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

jbrassow at sourceware.org jbrassow at sourceware.org
Fri Mar 25 22:02:27 UTC 2011


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	jbrassow at sourceware.org	2011-03-25 22:02:27

Modified files:
	lib/metadata   : lv_manip.c 

Log message:
	Fix unhandled condition in _move_lv_segments
	
	If _move_lv_segments is passed a 'lv_from' that does not yet
	have any segments, it will screw things up because the code
	that does the segment copy assumes there is at least one
	segment.  See copy code here:
	lv_to->segments = lv_from->segments;
	lv_to->segments.n->p = &lv_to->segments;
	lv_to->segments.p->n = &lv_to->segments;
	
	If 'segments' is an empty list, the first statement copies over
	the values, but the next two reset those values to point to the
	other LV's list structure.  'lv_to' now appears to have one
	segment, but it is really an ill-set pointer.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_manip.c.diff?cvsroot=lvm2&r1=1.251&r2=1.252

--- LVM2/lib/metadata/lv_manip.c	2011/02/28 19:53:03	1.251
+++ LVM2/lib/metadata/lv_manip.c	2011/03/25 22:02:27	1.252
@@ -2950,7 +2950,8 @@
 		}
 	}
 
-	lv_to->segments = lv_from->segments;
+	if (!dm_list_empty(&lv_from->segments))
+		lv_to->segments = lv_from->segments;
 	lv_to->segments.n->p = &lv_to->segments;
 	lv_to->segments.p->n = &lv_to->segments;
 




More information about the lvm-devel mailing list