libvirt/src/remote
Michal Privoznik ea73fcb3e3 remote_daemon_dispatch: Unref sasl session when closing client connection
In ideal world, where clients close connection gracefully their
SASL session is freed in virNetServerClientDispose() as it's
stored in client->sasl. Unfortunately, if client connection is
closed prematurely (e.g. the moment virsh asks for credentials),
the _virNetServerClient member is never set and corresponding
SASL session is never freed. The handler is still stored in
client private data, so free it in remoteClientCloseFunc().

  20,862 (288 direct, 20,574 indirect) bytes in 3 blocks are definitely lost in loss record 1,763 of 1,772
     at 0x50390C4: g_type_create_instance (in /usr/lib64/libgobject-2.0.so.0.7800.6)
     by 0x501BDAF: g_object_new_internal.part.0 (in /usr/lib64/libgobject-2.0.so.0.7800.6)
     by 0x501D43D: g_object_new_with_properties (in /usr/lib64/libgobject-2.0.so.0.7800.6)
     by 0x501E318: g_object_new (in /usr/lib64/libgobject-2.0.so.0.7800.6)
     by 0x49BAA63: virObjectNew (virobject.c:252)
     by 0x49BABC6: virObjectLockableNew (virobject.c:274)
     by 0x4B0526C: virNetSASLSessionNewServer (virnetsaslcontext.c:230)
     by 0x18EEFC: remoteDispatchAuthSaslInit (remote_daemon_dispatch.c:3696)
     by 0x15E128: remoteDispatchAuthSaslInitHelper (remote_daemon_dispatch_stubs.h:74)
     by 0x4B0FA5E: virNetServerProgramDispatchCall (virnetserverprogram.c:423)
     by 0x4B0F591: virNetServerProgramDispatch (virnetserverprogram.c:299)
     by 0x4B18AE3: virNetServerProcessMsg (virnetserver.c:135)

Resolves: https://issues.redhat.com/browse/RHEL-22574
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2024-06-27 17:02:51 +02:00
..
libvirtd-admin.socket.in
libvirtd-ro.socket.in
libvirtd-tcp.socket.in
libvirtd-tls.socket.in
libvirtd.aug.in
libvirtd.conf.in
libvirtd.confd
libvirtd.init.in
libvirtd.libxl.logrotate.in
libvirtd.logrotate.in
libvirtd.lxc.logrotate.in
libvirtd.policy
libvirtd.qemu.logrotate.in
libvirtd.rules
libvirtd.sasl
libvirtd.service.extra.in
libvirtd.service.in
libvirtd.socket.extra.in
libvirtd.socket.in
libvirtd.sysctl
lxc_protocol.x
meson.build
qemu_protocol.x
remote_daemon_config.c
remote_daemon_config.h
remote_daemon_dispatch.c
remote_daemon_dispatch.h
remote_daemon_stream.c
remote_daemon_stream.h
remote_daemon.c
remote_daemon.h
remote_driver.c
remote_driver.h
remote_protocol.x
remote_sockets.c
remote_sockets.h
remote_ssh_helper.c
test_libvirtd.aug.in
virt-guest-shutdown.target
virtproxyd.confd
virtproxyd.init.in
virtproxyd.service.extra.in
virtproxyd.socket.extra.in