[Pkg-libvirt-maintainers] Bug#705205: libvirt-bin: Memory leak in virStorageBackendLogicalMakeVol

Luca Tettamanti ltettamanti at acunu.com
Thu Apr 11 09:42:24 UTC 2013


Package: libvirt-bin
Version: 0.9.12-11
Severity: important
Tags: patch

Hello,
In our workload we use LVM for VM storage and continuously create and destroy instances.
We noticed that over time libvirtd memory usage grows until libvirt
cannot fork anymore (to spawn LVM tools):

virFork:279 : cannot fork child process: Cannot allocate memory

libvirtd won't crash (yet), but it will eventually mark all the storage
pools as offline.

I've tracked down the issue to a memory leak in
virStorageBackendLogicalMakeVol (creating a volume triggers a refresh of
the pool):

50,229,128 (820,736 direct, 49,408,392 indirect) bytes in 3,664 blocks are definitely lost in loss record 883 of 883
   at 0x4C28BED: malloc (vg_replace_malloc.c:263)
   by 0x4C28D6F: realloc (vg_replace_malloc.c:632)
   by 0x805ADF3: re_compile_internal (regcomp.c:760)
   by 0x805B1AB: regcomp (regcomp.c:506)
   by 0x4D13CD: virStorageBackendLogicalMakeVol (storage_backend_logical.c:203)
   by 0x4CE09B: virStorageBackendRunProgRegex (storage_backend.c:1512)
   by 0x4D0A8E: virStorageBackendLogicalFindLVs (storage_backend_logical.c:306)
   by 0x4D1971: virStorageBackendLogicalRefreshPool (storage_backend_logical.c:591)
   by 0x4C9596: storagePoolRefresh (storage_driver.c:904)
   by 0x511CE44: virStoragePoolRefresh (libvirt.c:12116)
   by 0x436687: remoteDispatchStoragePoolRefreshHelper (remote_dispatch.h:11759)
   by 0x515B7FF: virNetServerProgramDispatch (virnetserverprogram.c:423)

This bug has already been fixed upstream with commit 71da3b66 (which
also reverts afc4631b). This fix is already included in the experimental
package, but since it's self-contained and minimally intrusive I suggest
to backport it for Wheezy (and squeeze-backports?).
Patch is attached.

Luca

-- System Information:
Debian Release: 7.0
  APT prefers testing-updates
  APT policy: (500, 'testing-updates'), (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-4-amd64 (SMP w/1 CPU core)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libvirt-bin depends on:
ii  adduser             3.113+nmu3
ii  gettext-base        0.18.1.1-9
ii  libavahi-client3    0.6.31-2
ii  libavahi-common3    0.6.31-2
ii  libblkid1           2.20.1-5.3
ii  libc6               2.13-38
ii  libcap-ng0          0.6.6-2
ii  libdbus-1-3         1.6.8-1
ii  libdevmapper1.02.1  2:1.02.74-7
ii  libgcrypt11         1.5.0-5
ii  libgnutls26         2.12.20-4
ii  libnetcf1           0.1.9-2
ii  libnl1              1.1-7
ii  libnuma1            2.0.8~rc4-1
ii  libparted0debian1   2.3-12
ii  libpcap0.8          1.3.0-1
ii  libpciaccess0       0.13.1-2
ii  libreadline6        6.2+dfsg-0.1
ii  libsasl2-2          2.1.25.dfsg1-6
ii  libudev0            175-7.1
ii  libvirt0            0.9.12-11
ii  libxenstore3.0      4.1.4-2
ii  libxml2             2.8.0+dfsg1-7+nmu1
ii  libyajl2            2.0.4-2
ii  logrotate           3.8.1-4

Versions of packages libvirt-bin recommends:
ii  bridge-utils    1.5-6
ii  dmidecode       2.11-9
ii  dnsmasq-base    2.62-3+deb7u1
ii  ebtables        2.0.10.4-1
ii  gawk            1:4.0.1+dfsg-2.1
ii  iproute         20120521-3+b3
ii  iptables        1.4.14-3.1
ii  libxml2-utils   2.8.0+dfsg1-7+nmu1
ii  netcat-openbsd  1.105-7
ii  parted          2.3-12
ii  qemu            1.1.2+dfsg-6a
ii  qemu-kvm        1.1.2+dfsg-6

Versions of packages libvirt-bin suggests:
ii  policykit-1  0.105-3
ii  radvd        1:1.8.5-1

-- Configuration Files:
/etc/default/libvirt-bin changed [not included]
/etc/init.d/libvirt-bin changed [not included]

-- no debconf information

*** /tmp/fix-leak.diff
diff -Nru libvirt-0.9.12/debian/changelog libvirt-0.9.12/debian/changelog
--- libvirt-0.9.12/debian/changelog	2013-03-06 11:27:13.000000000 +0000
+++ libvirt-0.9.12/debian/changelog	2013-04-11 09:53:13.000000000 +0100
@@ -1,3 +1,10 @@
+libvirt (0.9.12-11.1) UNRELEASED; urgency=low
+
+  * Non-maintainer upload.
+  * Backport upstream 71da3b66 (fix leak in virStorageBackendLogicalMakeVol)
+
+ -- Luca Tettamanti <ltettamanti at acunu.com>  Thu, 11 Apr 2013 09:53:03 +0100
+
 libvirt (0.9.12-11) unstable; urgency=low
 
   * [422c506] Use "getent passwd" instead of the non existing "getent user"
diff -Nru libvirt-0.9.12/debian/patches/fix-leak-virStorageBackendLogicalMakeVol.patch libvirt-0.9.12/debian/patches/fix-leak-virStorageBackendLogicalMakeVol.patch
--- libvirt-0.9.12/debian/patches/fix-leak-virStorageBackendLogicalMakeVol.patch	1970-01-01 01:00:00.000000000 +0100
+++ libvirt-0.9.12/debian/patches/fix-leak-virStorageBackendLogicalMakeVol.patch	2013-04-11 09:55:16.000000000 +0100
@@ -0,0 +1,22 @@
+Index: libvirt-0.9.12/src/storage/storage_backend_logical.c
+===================================================================
+--- libvirt-0.9.12.orig/src/storage/storage_backend_logical.c	2012-04-18 06:07:44.000000000 +0100
++++ libvirt-0.9.12/src/storage/storage_backend_logical.c	2013-04-11 09:55:12.054035440 +0100
+@@ -204,13 +204,16 @@
+     if (err != 0) {
+         char error[100];
+         regerror(err, reg, error, sizeof(error));
++        regfree(reg);
+         virStorageReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("Failed to compile regex %s"),
+                               error);
+         goto cleanup;
+     }
+ 
+-    if (regexec(reg, groups[3], nvars, vars, 0) != 0) {
++    err = regexec(reg, groups[3], nvars, vars, 0);
++    regfree(reg);
++    if (err != 0) {
+         virStorageReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                               _("malformed volume extent devices value"));
+         goto cleanup;
diff -Nru libvirt-0.9.12/debian/patches/series libvirt-0.9.12/debian/patches/series
--- libvirt-0.9.12/debian/patches/series	2013-03-06 07:24:52.000000000 +0000
+++ libvirt-0.9.12/debian/patches/series	2013-04-11 09:53:38.000000000 +0100
@@ -18,3 +18,4 @@
 qemu-Fix-off-by-one-error-while-unescaping-monitor-s.patch
 rpc-Fix-crash-on-error-paths-of-message-dispatching.patch
 qemu-Add-support-for-no-user-config.patch
+fix-leak-virStorageBackendLogicalMakeVol.patch



More information about the Pkg-libvirt-maintainers mailing list