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
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to