[lvm-devel] master - dmsetup: check timerfd reads for valid byte count (Coverity)
Bryn Reeves
bmr at fedoraproject.org
Mon Aug 17 18:29:03 UTC 2015
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=12acf852c5661b771d8800a60dcf1ac799466289
Commit: 12acf852c5661b771d8800a60dcf1ac799466289
Parent: 074b5de7715b76ad63147f84edb5d9e1a05870e9
Author: Bryn M. Reeves <bmr at redhat.com>
AuthorDate: Mon Aug 17 19:26:44 2015 +0100
Committer: Bryn M. Reeves <bmr at redhat.com>
CommitterDate: Mon Aug 17 19:28:53 2015 +0100
dmsetup: check timerfd reads for valid byte count (Coverity)
The timerfd guarantees that it will return 8 bytes when a read(2)
is issued (a uint64_t giving the number of timer events during the
call). Check that it does so and log a non-fatal error if the byte
count is not 8.
---
tools/dmsetup.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/tools/dmsetup.c b/tools/dmsetup.c
index 7769fde..a937027 100644
--- a/tools/dmsetup.c
+++ b/tools/dmsetup.c
@@ -573,18 +573,25 @@ static int _start_timerfd_timer(void)
static int _do_timerfd_wait(void)
{
uint64_t expired;
+ ssize_t bytes;
if (_timer_fd < 0)
return 0;
/* read on timerfd returns a uint64_t in host byte order. */
- if (read(_timer_fd, &expired, sizeof(expired)) < 0) {
+ bytes = read(_timer_fd, &expired, sizeof(expired));
+
+ if (bytes < 0) {
/* EBADF from invalid timerfd or EINVAL from too small buffer. */
log_error("Interval timer wait failed: %s",
strerror(errno));
return 0;
}
+ /* read(2) on a timerfd descriptor is guaranteed to return 8 bytes. */
+ if (bytes != 8)
+ log_error("Unexepcted byte count on timerfd read: %d", bytes);
+
/* FIXME: attempt to rebase clock? */
if (expired > 1)
log_warn("WARNING: Try increasing --interval ("FMTu64
More information about the lvm-devel
mailing list