From e6c29bbae130c27d69a1194baaa0d20856fc9f38 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Thu, 26 Dec 2013 10:40:12 -0500 Subject: [PATCH] meminfo-writer: ensure we do not write outside our buffer Reading the max size would cause a NUL to be written after the buffer, while an error would cause one to be written before it. --- qmemman/meminfo-writer.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/qmemman/meminfo-writer.c b/qmemman/meminfo-writer.c index 7b2df7a..14ec6c6 100644 --- a/qmemman/meminfo-writer.c +++ b/qmemman/meminfo-writer.c @@ -163,17 +163,31 @@ int main(int argc, char **argv) } if (argc == 3) { /* if not waiting for signal, fork after first info written to xenstore */ - n = pread(fd, buf, sizeof(buf), 0); + n = pread(fd, buf, sizeof(buf)-1, 0); + if (n < 0) { + perror("pread"); + exit(1); + } buf[n] = 0; meminfo_data = parse(buf); if (meminfo_data) send_to_qmemman(xs, meminfo_data); - if (fork() > 0) + n = fork(); + if (n < 0) { + perror("fork"); + exit(1); + } + if (n > 0) exit(0); + usleep(delay); } for (;;) { - n = pread(fd, buf, sizeof(buf), 0); + n = pread(fd, buf, sizeof(buf)-1, 0); + if (n < 0) { + perror("pread"); + exit(1); + } buf[n] = 0; meminfo_data = parse(buf); if (meminfo_data)