1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-06 17:18:29 +03:00

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.
This commit is contained in:
Jonathan Earl Brassow 2011-03-25 22:02:27 +00:00
parent e720e51548
commit d010b440a3

View File

@ -2950,7 +2950,8 @@ static int _move_lv_segments(struct logical_volume *lv_to,
}
}
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;