diff --git a/WHATS_NEW b/WHATS_NEW index a4725b442..9c7110331 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.85 - =================================== + Fix reading of released memory for printing segment type. Fix syslog initialisation in clvmd to respect lvm.conf setting. Fix possible overflow in maximum stripe size and physical extent size. Add test for failed allocation from dm_task_set_uuid() in dmeventd. diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c index 4e7d9dc0b..1c027e89f 100644 --- a/lib/metadata/lv.c +++ b/lib/metadata/lv.c @@ -26,13 +26,13 @@ char *lvseg_tags_dup(const struct lv_segment *seg) return tags_format_and_copy(seg->lv->vg->vgmem, &seg->tags); } -char *lvseg_segtype_dup(const struct lv_segment *seg) +char *lvseg_segtype_dup(struct dm_pool *mem, const struct lv_segment *seg) { if (seg->area_count == 1) { return (char *)"linear"; } - return dm_pool_strdup(seg->lv->vg->vgmem, seg->segtype->ops->name(seg)); + return dm_pool_strdup(mem, seg->segtype->ops->name(seg)); } uint64_t lvseg_chunksize(const struct lv_segment *seg) diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h index 50afa2817..1c3640b53 100644 --- a/lib/metadata/lv.h +++ b/lib/metadata/lv.h @@ -66,7 +66,7 @@ uint32_t lv_kernel_read_ahead(const struct logical_volume *lv); uint64_t lvseg_start(const struct lv_segment *seg); uint64_t lvseg_size(const struct lv_segment *seg); uint64_t lvseg_chunksize(const struct lv_segment *seg); -char *lvseg_segtype_dup(const struct lv_segment *seg); +char *lvseg_segtype_dup(struct dm_pool *mem, const struct lv_segment *seg); char *lvseg_tags_dup(const struct lv_segment *seg); #endif /* _LVM_LV_H */ diff --git a/lib/report/properties.c b/lib/report/properties.c index a08470c35..9cafbcc71 100644 --- a/lib/report/properties.c +++ b/lib/report/properties.c @@ -225,7 +225,7 @@ GET_VG_NUM_PROPERTY_FN(vg_mda_copies, (vg_mda_copies(vg))) SET_VG_NUM_PROPERTY_FN(vg_mda_copies, vg_set_mda_copies) /* LVSEG */ -GET_LVSEG_STR_PROPERTY_FN(segtype, lvseg_segtype_dup(lvseg)) +GET_LVSEG_STR_PROPERTY_FN(segtype, lvseg_segtype_dup(lvseg->lv->vg->vgmem, lvseg)) #define _segtype_set _not_implemented_set GET_LVSEG_NUM_PROPERTY_FN(stripes, lvseg->area_count) #define _stripes_set _not_implemented_set diff --git a/lib/report/report.c b/lib/report/report.c index 0b1523f00..88489a64d 100644 --- a/lib/report/report.c +++ b/lib/report/report.c @@ -278,9 +278,13 @@ static int _segtype_disp(struct dm_report *rh __attribute__((unused)), const void *data, void *private __attribute__((unused))) { const struct lv_segment *seg = (const struct lv_segment *) data; - char *name; - name = lvseg_segtype_dup(seg); + + if (!(name = lvseg_segtype_dup(mem, seg))) { + log_error("Failed to get segtype."); + return 0; + } + dm_report_field_set_value(field, name, NULL); return 1; }