]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
lxc: fuse: Fix /proc/meminfo size calculation
authorCole Robinson <crobinso@redhat.com>
Thu, 21 Jan 2016 18:14:54 +0000 (13:14 -0500)
committerCole Robinson <crobinso@redhat.com>
Thu, 17 Mar 2016 19:58:42 +0000 (15:58 -0400)
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.

(cherry picked from commit 8418245a7e00f873594f1000c9606d08265088e0)

src/lxc/lxc_fuse.c

index f9c02c071e43c9c7b177b722192f323750755123..e6369f8ffc8e5509b58d0fbcf4c3a40a7d876db4 100644 (file)
@@ -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);