summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2015-10-30 08:57:34 +0100
committerPeter Rajnoha <prajnoha@redhat.com>2015-10-30 08:57:34 +0100
commitc2e88d1107c496d2c1b39bbbfb9795e88b3a6b60 (patch)
treea8c3a6fadb40f96ca0c3ac75bb13f05e74944dfa
parent406d8ff3323dde6860d88b603701aa4dace47af0 (diff)
downloadlvm2-c2e88d1107c496d2c1b39bbbfb9795e88b3a6b60.tar.gz
metadata: format_text: better check for metadata overlap
Actually, we don't need extra condition as introduced in commit 00348c0a630a7e5578edf48052ec695b15de752f. We should fix the last condition: (mdac->rlocn.size >= mdah->size) ...which should be: (MDA_HEADER_SIZE + (rlocn ? rlocn->size : 0) + mdac->rlocn.size >= mdah->size)) Where the "mdac" is new metadata, the "rlocn" is old metadata. So the main problem with the previous condition was that it didn't count in MDA_HEADER_SIZE properly (and possible existing metadata - the "rlocn"). This could have caused the error state where metadata in ring buffer overlap to not be hit. Replace the new condition introduced in 00348c0a630a7e5578edf48052ec695b15de752f with the improved one for the condition that existed there already but it was just incomplete.
-rw-r--r--lib/format_text/format-text.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c
index 84d09478d..29e9bd2a7 100644
--- a/lib/format_text/format-text.c
+++ b/lib/format_text/format-text.c
@@ -654,8 +654,7 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
if ((new_wrap && old_wrap) ||
(rlocn && (new_wrap || old_wrap) && (new_end > rlocn->offset)) ||
- (!rlocn && new_wrap && (new_end > mdac->rlocn.offset)) ||
- (mdac->rlocn.size >= mdah->size)) {
+ (MDA_HEADER_SIZE + (rlocn ? rlocn->size : 0) + mdac->rlocn.size >= mdah->size)) {
log_error("VG %s metadata too large for circular buffer",
vg->name);
goto out;