]> sourceware.org Git - lvm2.git/commitdiff
Ensure clvmd message is always \0 terminated
authorZdenek Kabelac <zkabelac@redhat.com>
Tue, 28 Feb 2012 11:06:56 +0000 (11:06 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Tue, 28 Feb 2012 11:06:56 +0000 (11:06 +0000)
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).

WHATS_NEW
daemons/clvmd/clvmd.c

index 33ca602006c8b7ed9cfbf4b191950928b39ecbc1..315853da91cdbb79a4ee3ea99802f81bc6eec03b 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -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.
index b1d75a6db24b4a35cc388f93c2d98dda1dc8e50c..2ee561088e7eab65410d6d11c4ca0306b4f31ed9 100644 (file)
@@ -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 */
This page took 0.04112 seconds and 5 git commands to generate.