[lvm-devel] [PATCH] Fix log allocation segfault

Milan Broz mbroz at redhat.com
Sun May 31 20:45:56 UTC 2009


Fix log allocation segfault.

If there is no free area for log, code should break the loop.
(Otherwise it uses uninitializes areas later.)

Easily reproducible using lvconvert --repair
 - kill device with log
 - run lvconvert --repair vg/lv (with no PV usable for log)

(patch just reintroduces part of previous code)

Signed-off-by: Milan Broz <mbroz at redhat.com>
---
 lib/metadata/lv_manip.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 79407ae..3e64f48 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -1124,6 +1124,10 @@ static int _find_parallel_space(struct alloc_handle *ah, alloc_policy_t alloc,
 		if ((contiguous || cling) && (preferred_count < ix_offset))
 			break;
 
+		if (ix + ix_offset < ah->area_count +
+			((ah->log_count && !ah->log_area.len) ? ah->log_count : 0))
+			break;
+
 		/* sort the areas so we allocate from the biggest */
 		if (ix > 1)
 			qsort(areas + ix_offset, ix, sizeof(*areas),






More information about the lvm-devel mailing list