This is the mail archive of the lvm2-cvs@sourceware.org mailing list for the LVM2 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

LVM2/lib/metadata lv_manip.c


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	jbrassow@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;
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]