summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2017-03-30 00:17:37 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2017-03-30 00:38:41 +0200
commitdfdd6ccf3be73a2b22743ea1df31cd3d7e3c9095 (patch)
treec8462eb0a2f7fec67dca15c76a0a2923eb47a49e
parent4b3d71212fb07c945acebb074820a63e970504e5 (diff)
downloadlvm2-dfdd6ccf3be73a2b22743ea1df31cd3d7e3c9095.tar.gz
vgrename: use long enough buffer for path
Use PATH_MAX when creating buffers for rename.
-rw-r--r--WHATS_NEW1
-rw-r--r--daemons/cmirrord/functions.c2
-rw-r--r--tools/vgrename.c12
3 files changed, 10 insertions, 5 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 63494682f..abff1c819 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.170 -
==================================
+ Check and use PATH_MAX buffers when creating vgrename device paths.
Version 2.02.169 - 28th March 2017
==================================
diff --git a/daemons/cmirrord/functions.c b/daemons/cmirrord/functions.c
index 5e50b8a58..03f8626de 100644
--- a/daemons/cmirrord/functions.c
+++ b/daemons/cmirrord/functions.c
@@ -377,7 +377,7 @@ static int _clog_ctr(char *uuid, uint64_t luid,
uint32_t block_on_error = 0;
int disk_log;
- char disk_path[128];
+ char disk_path[PATH_MAX];
int unlink_path = 0;
long page_size;
int pages;
diff --git a/tools/vgrename.c b/tools/vgrename.c
index 293f63ccc..5c69faf26 100644
--- a/tools/vgrename.c
+++ b/tools/vgrename.c
@@ -38,8 +38,8 @@ static int _vgrename_single(struct cmd_context *cmd, const char *vg_name,
struct volume_group *vg, struct processing_handle *handle)
{
struct vgrename_params *vp = (struct vgrename_params *) handle->custom_handle;
- char old_path[NAME_LEN];
- char new_path[NAME_LEN];
+ char old_path[PATH_MAX];
+ char new_path[PATH_MAX];
struct id id;
const char *name;
char *dev_dir;
@@ -136,8 +136,12 @@ static int _vgrename_single(struct cmd_context *cmd, const char *vg_name,
goto error;
}
- sprintf(old_path, "%s%s", dev_dir, vg_name);
- sprintf(new_path, "%s%s", dev_dir, vp->vg_name_new);
+ if ((dm_snprintf(old_path, sizeof(old_path), "%s%s", dev_dir, vg_name) < 0) ||
+ (dm_snprintf(new_path, sizeof(new_path), "%s%s", dev_dir, vp->vg_name_new) < 0)) {
+ log_error("Renaming path is too long %s/%s %s/%s",
+ dev_dir, vg_name, dev_dir, vp->vg_name_new);
+ goto error;
+ }
if (activation() && dir_exists(old_path)) {
log_verbose("Renaming \"%s\" to \"%s\"", old_path, new_path);