diff mbox

[2/4] lxc: fuse: Fix /proc/meminfo size calculation

Message ID 55fddef24ef0ce6a7f4b25a3ac5314ccf98f9ec3.1453401727.git.crobinso@redhat.com
State Accepted
Commit 8418245a7e00f873594f1000c9606d08265088e0
Headers show

Commit Message

Cole Robinson Jan. 21, 2016, 6:42 p.m. UTC
We virtualize bits of /proc/meminfo by replacing host values with
values specific to the container.

However for calculating the final size of the returned data, we are
using the size of the original file and not the altered copy, which
could give garbelled output.
---
 src/lxc/lxc_fuse.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

-- 
2.5.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
diff mbox

Patch

diff --git a/src/lxc/lxc_fuse.c b/src/lxc/lxc_fuse.c
index 86c0d10..ffa6889 100644
--- a/src/lxc/lxc_fuse.c
+++ b/src/lxc/lxc_fuse.c
@@ -131,7 +131,6 @@  static int lxcProcHostRead(char *path, char *buf, size_t size, off_t offset)
 static int lxcProcReadMeminfo(char *hostpath, virDomainDefPtr def,
                               char *buf, size_t size, off_t offset)
 {
-    int copied = 0;
     int res;
     FILE *fd = NULL;
     char *line = NULL;
@@ -159,7 +158,7 @@  static int lxcProcReadMeminfo(char *hostpath, virDomainDefPtr def,
     }
 
     res = -1;
-    while (copied < size && getline(&line, &n, fd) > 0) {
+    while (getline(&line, &n, fd) > 0) {
         char *ptr = strchr(line, ':');
         if (!ptr)
             continue;
@@ -219,13 +218,11 @@  static int lxcProcReadMeminfo(char *hostpath, virDomainDefPtr def,
             res = -errno;
             goto cleanup;
         }
-
-        copied += strlen(line);
-        if (copied > size)
-            copied = size;
     }
-    res = copied;
-    memcpy(buf, virBufferCurrentContent(new_meminfo), copied);
+    res = strlen(virBufferCurrentContent(new_meminfo));
+    if (res > size)
+        res = size;
+    memcpy(buf, virBufferCurrentContent(new_meminfo), res);
 
  cleanup:
     VIR_FREE(line);