diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2012-02-28 11:06:56 +0000 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2012-02-28 11:06:56 +0000 |
commit | bd046f0201cfe3f69be81a0727d39e79bb992d9f (patch) | |
tree | 6538c5c72d8d5560eb1f22363e4a116bfa4963db | |
parent | c19d86338d6a88a3e91b42a8acca2ee9ff5a1543 (diff) | |
download | lvm2-bd046f0201cfe3f69be81a0727d39e79bb992d9f.tar.gz lvm2-bd046f0201cfe3f69be81a0727d39e79bb992d9f.tar.xz lvm2-bd046f0201cfe3f69be81a0727d39e79bb992d9f.zip |
Ensure clvmd message is always \0 terminated
Drop whole buffer clearing (most messages at <100 bytes).
Just make sure we have always \0 terminated string for strlen() operations.
(before for PIPE_BUF sized messages this was not set).
-rw-r--r-- | WHATS_NEW | 1 | ||||
-rw-r--r-- | daemons/clvmd/clvmd.c | 6 |
2 files changed, 4 insertions, 3 deletions
@@ -1,5 +1,6 @@ Version 2.02.94 - ==================================== + Ensure clvmd message is always \0 terminated after read. Better detection of missing dmeventd fifo connection (2.02.93). Add some close() and dev_close() error path backtraces. For polling daemon reopen stdin,stdout,stderr to /dev/null. diff --git a/daemons/clvmd/clvmd.c b/daemons/clvmd/clvmd.c index b1d75a6d..2ee56108 100644 --- a/daemons/clvmd/clvmd.c +++ b/daemons/clvmd/clvmd.c @@ -1087,10 +1087,9 @@ static int read_from_local_sock(struct local_client *thisfd) int len; int argslen; int missing_len; - char buffer[PIPE_BUF]; + char buffer[PIPE_BUF + 1]; - memset(buffer, 0, PIPE_BUF); - len = read(thisfd->fd, buffer, sizeof(buffer)); + len = read(thisfd->fd, buffer, sizeof(buffer) - 1); if (len == -1 && errno == EINTR) return 1; @@ -1180,6 +1179,7 @@ static int read_from_local_sock(struct local_client *thisfd) struct clvm_header *inheader; int status; + buffer[len] = 0; /* Ensure \0 terminated */ inheader = (struct clvm_header *) buffer; /* Fill in the client ID */ |