[lvm-devel] [LVM2 PATCH] Fix _raw_read_mda_header does not free struct mda_header *mdah in error paths
Dave Wysochanski
dave.wysochanski at redhat.com
Mon Jan 8 21:45:01 UTC 2007
Fix error paths of _raw_read_mda_header
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=220563
Index: LVM2/WHATS_NEW
===================================================================
--- LVM2.orig/WHATS_NEW 2007-01-08 16:35:38.000000000 -0500
+++ LVM2/WHATS_NEW 2007-01-08 16:36:31.000000000 -0500
@@ -1,5 +1,6 @@
Version 2.02.18 -
====================================
+ Fix _raw_read_mda_header() error paths to free memory.
Fix typeo in lvextend man pg.
Fix misleading vgsplit error message when LV is part of PV not on cmdline.
Add dmeventd_mirror register_mutex, tidy initialisation & add memlock.
Index: LVM2/lib/format_text/format-text.c
===================================================================
--- LVM2.orig/lib/format_text/format-text.c 2006-11-30 18:11:41.000000000 -0500
+++ LVM2/lib/format_text/format-text.c 2006-12-26 18:14:15.000000000 -0500
@@ -127,42 +127,45 @@ static struct mda_header *_raw_read_mda_
if (!(mdah = dm_pool_alloc(fmt->cmd->mem, MDA_HEADER_SIZE))) {
log_error("struct mda_header allocation failed");
- return NULL;
+ goto error;
}
if (!dev_read(dev_area->dev, dev_area->start, MDA_HEADER_SIZE, mdah)) {
stack;
- dm_pool_free(fmt->cmd->mem, mdah);
- return NULL;
+ goto error;
}
if (mdah->checksum_xl != xlate32(calc_crc(INITIAL_CRC, mdah->magic,
MDA_HEADER_SIZE -
sizeof(mdah->checksum_xl)))) {
log_error("Incorrect metadata area header checksum");
- return NULL;
+ goto error;
}
_xlate_mdah(mdah);
if (strncmp((char *)mdah->magic, FMTT_MAGIC, sizeof(mdah->magic))) {
log_error("Wrong magic number in metadata area header");
- return NULL;
+ goto error;
}
if (mdah->version != FMTT_VERSION) {
log_error("Incompatible metadata area header version: %d",
mdah->version);
- return NULL;
+ goto error;
}
if (mdah->start != dev_area->start) {
log_error("Incorrect start sector in metadata area header: %"
PRIu64, mdah->start);
- return NULL;
+ goto error;
}
return mdah;
+ error:
+ if (mdah)
+ dm_pool_free(fmt->cmd->mem, mdah);
+ return NULL;
}
static int _raw_write_mda_header(const struct format_type *fmt,
More information about the lvm-devel
mailing list