diff options
author | David Teigland <teigland@redhat.com> | 2021-01-13 13:33:19 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2021-01-13 13:39:33 -0600 |
commit | 0534723a2de62da913dfd88d40ee6f8b8b93ac56 (patch) | |
tree | 0747d36aeeb7bfdb2773a0ddbe47b9d2ce1b8063 | |
parent | ff1324d5952db6f79c2c916c4f4520b3338abf4f (diff) | |
download | lvm2-0534723a2de62da913dfd88d40ee6f8b8b93ac56.tar.gz |
integrity: fix segfault on error path when replacing images
When adding replacement raid+integrity images (lvconvert --repair
after a raid image is lost), various errors can cause the function
to exit with an error. On this exit path, the function attempts
to revert new images that had been created but not yet used. The
cleanup failed to account for the fact that not all images needed
to be reverted.
-rw-r--r-- | lib/metadata/integrity_manip.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/metadata/integrity_manip.c b/lib/metadata/integrity_manip.c index 53ab1b3fa..abf90d850 100644 --- a/lib/metadata/integrity_manip.c +++ b/lib/metadata/integrity_manip.c @@ -773,9 +773,13 @@ int lv_add_integrity_to_raid(struct logical_volume *lv, struct integrity_setting bad: log_error("Failed to add integrity."); - for (s = 0; s < revert_meta_lvs; s++) { - if (!lv_remove(imeta_lvs[s])) - log_error("New integrity metadata LV may require manual removal."); + if (revert_meta_lvs) { + for (s = 0; s < DEFAULT_RAID_MAX_IMAGES; s++) { + if (!imeta_lvs[s]) + continue; + if (!lv_remove(imeta_lvs[s])) + log_error("New integrity metadata LV may require manual removal."); + } } if (!vg_write(vg) || !vg_commit(vg)) |