summaryrefslogtreecommitdiff
path: root/libdm
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2013-09-18 01:13:06 +0100
committerAlasdair G Kergon <agk@redhat.com>2013-09-18 01:13:06 +0100
commita0ca2c11ee69b51a99644955cb4daa8ca50c8034 (patch)
tree36f2c0618fd9d07a9b7b47696ebd6e78b1c7e969 /libdm
parenta3a5f58c21edba308dd8ced15860e52b5b902890 (diff)
downloadlvm2-a0ca2c11ee69b51a99644955cb4daa8ca50c8034.tar.gz
libdm: avoid leak if dm_task_set_* fn called again
(Mikulas)
Diffstat (limited to 'libdm')
-rw-r--r--libdm/ioctl/libdm-iface.c3
-rw-r--r--libdm/libdm-common.c1
2 files changed, 4 insertions, 0 deletions
diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c
index b0a2228cc..c530bb79a 100644
--- a/libdm/ioctl/libdm-iface.c
+++ b/libdm/ioctl/libdm-iface.c
@@ -785,6 +785,7 @@ int dm_task_set_newuuid(struct dm_task *dmt, const char *newuuid)
newuuid = mangled_uuid;
}
+ dm_free(dmt->newname);
if (!(dmt->newname = dm_strdup(newuuid))) {
log_error("dm_task_set_newuuid: strdup(%s) failed", newuuid);
return 0;
@@ -796,6 +797,7 @@ int dm_task_set_newuuid(struct dm_task *dmt, const char *newuuid)
int dm_task_set_message(struct dm_task *dmt, const char *message)
{
+ dm_free(dmt->message);
if (!(dmt->message = dm_strdup(message))) {
log_error("dm_task_set_message: strdup failed");
return 0;
@@ -814,6 +816,7 @@ int dm_task_set_sector(struct dm_task *dmt, uint64_t sector)
int dm_task_set_geometry(struct dm_task *dmt, const char *cylinders, const char *heads,
const char *sectors, const char *start)
{
+ dm_free(dmt->geometry);
if (dm_asprintf(&(dmt->geometry), "%s %s %s %s",
cylinders, heads, sectors, start) < 0) {
log_error("dm_task_set_geometry: sprintf failed");
diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c
index c0669cbd5..b66911c81 100644
--- a/libdm/libdm-common.c
+++ b/libdm/libdm-common.c
@@ -720,6 +720,7 @@ int dm_task_set_newname(struct dm_task *dmt, const char *newname)
newname = mangled_name;
}
+ dm_free(dmt->newname);
if (!(dmt->newname = dm_strdup(newname))) {
log_error("dm_task_set_newname: strdup(%s) failed", newname);
return 0;