The host being libvirt starts to communicate with libvirt_lxc
in src/lxc/lxc_process.c:
monitor = virLXCMonitorNew(vm, cfg->stateDir, &monitorCallbacks);
On the receiving side this then crashes
__GI_xdr_uint64_t is xdr_uint64_t is of glibc-2.31/sunrpc/xdr_intXX_t.c
Once the libvirt_lxc process exists
communication is via /run/libvirt/lxc/sl.sock
then on libvirtd break on
b virLXCMonitorNew
On the receiving end we see:
b virLXCControllerEventSendInit
That receives it like
Thread 1 "libvirt_lxc" hit Breakpoint 1, virLXCControllerEventSendInit
(initpid=265337, ctrl=0x56399bb35c20) at ../../../src/lxc/lxc_controller.c:2304
2304 VIR_DEBUG("Init pid %lld", (long long)initpid);
The pid here is 265337 and the process exists
(gdb) p initpid
$1 = 265337
$ ps axlf
4 0 265335 1 20 0 143352 19352 - tl ? 0:00
/usr/lib/libvirt/libvirt_lxc --name sl --console 25 --security=apparmor
--handshake 30
4 0 265337 265335 20 0 4240 3452 - Ss+ pts/0 0:00 \_
/bin/bash
(gdb) p *ctrl
$3 = {name = 0x56399bb360f0 "sl", vm = 0x56399bb468a0, def = 0x56399bb44c10,
handshakeFd = -1, initpid = 265337, nnbdpids = 0, nbdpids = 0x0, nveths = 0,
veths = 0x0, nnicindexes = 0,
nicindexes = 0x0, npassFDs = 0, passFDs = 0x0, nsFDs = 0x0, nconsoles = 1,
consoles = 0x56399bb4a000, devptmx = 0x56399bb45800
"/run/libvirt/lxc/sl.devpts/ptmx", nloopDevs = 0,
loopDevFds = 0x0, securityManager = 0x56399bb49830, daemon = 0x56399bb4b030,
firstClient = true, client = 0x56399bb71080, prog = 0x56399bb41810, inShutdown
= false, timerShutdown = 1,
cgroup = 0x56399bb6f250, fuse = 0x56399bb3ef00}
It wants to reply:
2308 virLXCControllerEventSend(ctrl,
2309 VIR_LXC_MONITOR_PROC_INIT_EVENT,
2310 (xdrproc_t)xdr_virLXCMonitorInitEventMsg,
2311 (void*)&msg);
(gdb) p ctrl->client
$6 = (virNetServerClientPtr) 0x56399bb71080
This eventually calls virNetMessageEncodePayload(msg, proc, data)
(gdb) p *msg
$14 = {tracked = false, buffer = 0x56399bb72000 "", bufferLength = 65540,
bufferOffset = 28, header = {prog = 305402420, vers = 1, proc = 2, type =
VIR_NET_MESSAGE, serial = 1,
status = VIR_NET_OK}, cb = 0x0, opaque = 0x0, nfds = 0, fds = 0x0, donefds
= 0, next = 0x0}
(gdb) p data
$15 = (void *) 0x7ffe62f988d0
(gdb) p proc
$16 = (xdrproc_t) 0x56399aba6600 <xdr_virLXCMonitorInitEventMsg>
All lookg quite normal, then it jumps with these values into
xdr_virLXCMonitorInitEventMsg -> __GI_xdr_uint64_t and on the return path
from there returns to 0x0 crashing due to that.
Also needs:
$ sudo apt install libvirt0-dbgsym
And actually best a -O0 build of this.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1892826
Title:
autopkgtest breaks in groovy at 6.6.0-1ubuntu1 for smoke-lxc
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1892826/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs