master - vgrename: use long enough buffer for path
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=dfdd6ccf3be73a2b227...
Commit: dfdd6ccf3be73a2b22743ea1df31cd3d7e3c9095
Parent: 4b3d71212fb07c945acebb074820a63e970504e5
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Mar 30 00:17:37 2017 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Mar 30 00:38:41 2017 +0200
vgrename: use long enough buffer for path
Use PATH_MAX when creating buffers for rename.
---
WHATS_NEW | 1 +
daemons/cmirrord/functions.c | 2 +-
tools/vgrename.c | 12 ++++++++----
3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 6349468..abff1c8 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 5e50b8a..03f8626 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 293f63c..5c69faf 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);
7 years
master - libdm: use log_sys_error if dmfilemapd exec fails
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=4b3d71212fb07c945ac...
Commit: 4b3d71212fb07c945acebb074820a63e970504e5
Parent: 5994ed9df218d4201415855b9bd6defa6f371c74
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 21:27:11 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 21:38:15 2017 +0100
libdm: use log_sys_error if dmfilemapd exec fails
Use log_sys_error rather than log_error if execvp() fails:
/mnt/redhat/xdoio.13752.XIORQ: Created new group with 2 region(s) as group ID 0.
# execvp() failed.
vs:
/var/lib/libvirt/images/rhel7-vm1.qcow2: Created new group with 884 region(s) as group ID 0.
dmfilemapd: execvp failed: No such file or directory
---
libdm/libdm-stats.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index 3e2983d..290097f 100644
--- a/libdm/libdm-stats.c
+++ b/libdm/libdm-stats.c
@@ -5032,7 +5032,7 @@ int dm_stats_start_filemapd(int fd, uint64_t group_id, const char *path,
}
execvp(args[0], args);
- log_error("execvp() failed.");
+ log_sys_error("execvp", args[0]);
if (!foreground)
_exit(127);
return 0;
7 years
master - dmsetup: always close fd when leaving _stats_update_file() (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=5994ed9df218d420141...
Commit: 5994ed9df218d4201415855b9bd6defa6f371c74
Parent: 11749e7adbafc36452451de0f73a6a5197c73810
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 18:27:11 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:57 2017 +0100
dmsetup: always close fd when leaving _stats_update_file() (coverity)
---
tools/dmsetup.c | 8 +++-----
1 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/tools/dmsetup.c b/tools/dmsetup.c
index a6ed172..5f07ab6 100644
--- a/tools/dmsetup.c
+++ b/tools/dmsetup.c
@@ -5730,11 +5730,6 @@ fallback:
*/
regions = dm_stats_update_regions_from_fd(dms, fd, group_id);
- if (close(fd))
- log_error("Error closing %s", abspath);
-
- fd = -1;
-
if (!regions) {
log_error("Could not update regions from file %s", abspath);
goto bad;
@@ -5753,6 +5748,9 @@ fallback:
path, group_id, count);
out:
+ if (close(fd))
+ log_error("Error closing %s", abspath);
+
dm_free(regions);
dm_free(abspath);
dm_stats_destroy(dms);
7 years
master - dmsetup: do not start dmfilemapd if region creation fails (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=11749e7adbafc364524...
Commit: 11749e7adbafc36452451de0f73a6a5197c73810
Parent: 6740eb1c2b8cde6aabce0d9b0847c01b69210065
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 18:21:17 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:51 2017 +0100
dmsetup: do not start dmfilemapd if region creation fails (coverity)
---
tools/dmsetup.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/tools/dmsetup.c b/tools/dmsetup.c
index 94787dc..a6ed172 100644
--- a/tools/dmsetup.c
+++ b/tools/dmsetup.c
@@ -5110,6 +5110,11 @@ static int _stats_create_file(CMD_ARGS)
regions = dm_stats_create_regions_from_fd(dms, fd, group, precise,
bounds, alias);
+ if (!regions) {
+ log_error("Could not create regions from file %s", abspath);
+ goto bad;
+ }
+
if (!_switches[NOMONITOR_ARG] && group) {
if (!dm_stats_start_filemapd(fd, regions[0], abspath, mode,
foreground, verbose))
@@ -5121,11 +5126,6 @@ static int _stats_create_file(CMD_ARGS)
fd = -1;
- if (!regions) {
- log_error("Could not create regions from file %s", abspath);
- goto bad;
- }
-
for (region = regions; *region != DM_STATS_REGIONS_ALL; region++)
count++;
7 years
master - libdm: do not attempt filemap cleanup if dm_stats_list() fails (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=6740eb1c2b8cde6aabc...
Commit: 6740eb1c2b8cde6aabce0d9b0847c01b69210065
Parent: f86c1f5d0a38afc9d174e59af4bab83127e4b2b8
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 17:41:03 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:43 2017 +0100
libdm: do not attempt filemap cleanup if dm_stats_list() fails (coverity)
---
libdm/libdm-stats.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index 94696fb..3e2983d 100644
--- a/libdm/libdm-stats.c
+++ b/libdm/libdm-stats.c
@@ -4743,7 +4743,8 @@ out_remove:
* single list operation and call _stats_delete_region() directly
* to avoid a @stats_list ioctl and list parsing for each region.
*/
- dm_stats_list(dms, NULL);
+ if (!dm_stats_list(dms, NULL))
+ goto out;
fail_region = i;
_stats_cleanup_region_ids(dms, regions, fail_region);
7 years
master - libdm: abort filemap update if pool allocation fails (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=f86c1f5d0a38afc9d17...
Commit: f86c1f5d0a38afc9d174e59af4bab83127e4b2b8
Parent: bc5d67884fd489682c0267002474e9089e368fe2
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 17:39:31 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:38 2017 +0100
libdm: abort filemap update if pool allocation fails (coverity)
---
libdm/libdm-stats.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index 5041d61..94696fb 100644
--- a/libdm/libdm-stats.c
+++ b/libdm/libdm-stats.c
@@ -4540,8 +4540,9 @@ static int _stats_unmap_regions(struct dm_stats *dms, uint64_t group_id,
ext.id = i;
nr_kept++;
- dm_pool_grow_object(mem, &ext,
- sizeof(ext));
+ if (!dm_pool_grow_object(mem, &ext, sizeof(ext)))
+ goto out;
+
log_very_verbose("Kept region " FMTu64, i);
} else {
7 years
master - libdm: do not leak FIEMAP extent buffer if pool allocation fails (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=bc5d67884fd489682c0...
Commit: bc5d67884fd489682c0267002474e9089e368fe2
Parent: 13426092e9681d13acfa9eae505b20537c236340
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 17:37:10 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:30 2017 +0100
libdm: do not leak FIEMAP extent buffer if pool allocation fails (coverity)
---
libdm/libdm-stats.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index fa865a1..5041d61 100644
--- a/libdm/libdm-stats.c
+++ b/libdm/libdm-stats.c
@@ -4401,10 +4401,14 @@ static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
unsigned long flags = 0;
uint64_t *buf;
+ /* grow temporary extent table in the pool */
+ if (!dm_pool_begin_object(mem, sizeof(*extents)))
+ return NULL;
+
buf = dm_zalloc(STATS_FIE_BUF_LEN);
if (!buf) {
log_error("Could not allocate memory for FIEMAP buffer.");
- return NULL;
+ goto bad;
}
/* initialise pointers into the ioctl buffer. */
@@ -4415,10 +4419,6 @@ static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
*count = (STATS_FIE_BUF_LEN - sizeof(*fiemap))
/ sizeof(struct fiemap_extent);
- /* grow temporary extent table in the pool */
- if (!dm_pool_begin_object(mem, sizeof(*extents)))
- return NULL;
-
flags = FIEMAP_FLAG_SYNC;
do {
7 years
master - dmfilemapd: free region table at end of _update_regions() (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=13426092e9681d13acf...
Commit: 13426092e9681d13acfa9eae505b20537c236340
Parent: f66bc3dab07f3394150536819943a5c31ce793bf
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 17:33:23 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:24 2017 +0100
dmfilemapd: free region table at end of _update_regions() (coverity)
---
daemons/dmfilemapd/dmfilemapd.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/daemons/dmfilemapd/dmfilemapd.c b/daemons/dmfilemapd/dmfilemapd.c
index 2fa51ee..dd1db03 100644
--- a/daemons/dmfilemapd/dmfilemapd.c
+++ b/daemons/dmfilemapd/dmfilemapd.c
@@ -687,7 +687,7 @@ static int _update_regions(struct dm_stats *dms, struct filemap_monitor *fm)
fm->group_id, regions[0]);
fm->group_id = regions[0];
}
-
+ dm_free(regions);
fm->nr_regions = nr_regions;
return 1;
}
7 years
master - dmfilemapd: fix off-by-one in fd comparison (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=f66bc3dab07f3394150...
Commit: f66bc3dab07f3394150536819943a5c31ce793bf
Parent: 8658bbe3eed38183554643f93f4c23718fd24827
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 17:25:20 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:19 2017 +0100
dmfilemapd: fix off-by-one in fd comparison (coverity)
The function _filemap_monitor_check_file_unlinked() attempts to
test whether a fd value should be closed by comparison to zero:
if ((fd > 0) && close(fd))
log_error("Error closing fd %d", fd);
The test should be '>=' since 0 is a valid file descriptor.
---
daemons/dmfilemapd/dmfilemapd.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/daemons/dmfilemapd/dmfilemapd.c b/daemons/dmfilemapd/dmfilemapd.c
index 0f3780b..2fa51ee 100644
--- a/daemons/dmfilemapd/dmfilemapd.c
+++ b/daemons/dmfilemapd/dmfilemapd.c
@@ -603,7 +603,7 @@ check_unlinked:
else
same = _filemap_monitor_check_same_file(fm->fd, fd);
- if ((fd > 0) && close(fd))
+ if ((fd >= 0) && close(fd))
log_error("Error closing fd %d", fd);
if (same < 0)
7 years
master - dmfilemapd: always close link check file descriptor (coverity)
by Bryn Reeves
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=8658bbe3eed38183554...
Commit: 8658bbe3eed38183554643f93f4c23718fd24827
Parent: 7db51a6bed8704ec634b44b4c5bd1dc35fdae86b
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Wed Mar 29 17:22:18 2017 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Wed Mar 29 18:34:11 2017 +0100
dmfilemapd: always close link check file descriptor (coverity)
Similar to 40fb91a, but for the file descriptor opened using the
link path reported by /proc/<self>/fd/<fd>.
The daemon opens a new file descriptor from /proc/<self>/fd when
checking for an unlinked file with mode=inode. Ensure that it is
always closed even if the same file test fails.
---
daemons/dmfilemapd/dmfilemapd.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/daemons/dmfilemapd/dmfilemapd.c b/daemons/dmfilemapd/dmfilemapd.c
index 6e25c5c..0f3780b 100644
--- a/daemons/dmfilemapd/dmfilemapd.c
+++ b/daemons/dmfilemapd/dmfilemapd.c
@@ -600,13 +600,15 @@ check_unlinked:
*/
if ((fd = open(link_buf, O_RDONLY)) < 0)
fm->deleted = 1;
-
- if ((same = _filemap_monitor_check_same_file(fm->fd, fd)) < 0)
- return 0;
+ else
+ same = _filemap_monitor_check_same_file(fm->fd, fd);
if ((fd > 0) && close(fd))
log_error("Error closing fd %d", fd);
+ if (same < 0)
+ return 0;
+
/* Should not happen with normal /proc. */
if ((fd > 0) && !same) {
log_error("File descriptor mismatch: %d and %s (read from %s) "
7 years