[Pkg-libvirt-maintainers] Bug#732394: libvirt-bin: virsh shutdown does not handle symlinks correctly for LXC
Reco
recoverym4n at gmail.com
Tue Dec 17 15:41:30 UTC 2013
Package: libvirt-bin
Version: 1.1.4-2~bpo70+1
Severity: important
Dear Maintainer,
As of versions 1.1.4 (current backported one) and 1.2.0 (current
experimental one) libvirt's implementation for LXC containers lacks
basic sanity checks in container shutdown implementation.
One can trace the problem to virInitctlSetRunLevel function at
src/util/virinitctl.c file.
Once user invokes 'virsh -c lxc:// shutdown', libvirtd constructs a
pathname to '/dev/initctl' inside the container, such as:
/proc/<container_init_pid>/root//dev/initctl
opens it without any additional checking and writes runlevel change
request to the init. It does not check whenever constructed pathname is
an actual pipe, which is bad. It does not check who exactly is on the
other side of this pipe, which is much worse.
Apparently this code was tested against systemd, which
creates /dev/initctl pipe and listens on it.
But, both upstart and sysvinit do not create such pipe (current wheezy's
init is using /run/initctl), which leads to this problem.
To reproduce the problem, one will need:
1) One Debian GNU/Linux installation, configured to run LXC (cgroups and
stuff), using sysvinit or upstart as PID 1.
2) One Debian GNU/Linux container, running sysvinit or upstart.
3) Boot the container.
4) Invoke inside the container:
ln -s /run/initctl /dev/initctl
5) Invoke from outside the container:
virsh -c lxc:// shutdown <container>
6) Observe the host shutting down.
-- System Information:
Debian Release: 7.3
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 3.11-0.bpo.2-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.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 init-system-helpers 1.11~bpo70.1
ii libaudit0 1:1.7.18-1.1
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+deb7u1
ii libdevmapper1.02.1 2:1.02.74-8
ii libfuse2 2.9.0-2+deb7u1
ii libgcrypt11 1.5.0-5+deb7u1
ii libgnutls26 2.12.20-7
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+deb7u1
ii libssh2-1 1.4.2-1.1
ii libudev0 175-7.2
ii libvirt0 1.1.4-2~bpo70+1
ii libxenstore3.0 4.1.4-3+deb7u1
ii libxml2 2.8.0+dfsg1-7+nmu2
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
pn ebtables <none>
ii iproute 20120521-3+b3
ii iptables 1.4.14-3.1
ii libxml2-utils 2.8.0+dfsg1-7+nmu2
ii netcat-openbsd 1.105-7
ii parted 2.3-12
ii pm-utils 1.4.1-9
pn qemu-kvm | qemu <none>
Versions of packages libvirt-bin suggests:
pn auditd <none>
pn policykit-1 <none>
pn radvd <none>
pn systemtap <none>
-- Configuration Files:
<omitted>
-- no debconf information
More information about the Pkg-libvirt-maintainers
mailing list