NetworkManager/src/libnm-client-impl
Thomas Haller 8eef822093
libnm: fix dangling pointer in "o" properties when unregistering NMObject
When NMClient gets destroyed, it unrefs all NMObject. We need to unbreak
cycles then, and the property getters must return NULL. In particular,
for "o" type properties (NMLDBusPropertyO), this was not done correctly.
For example, calling nm_device_get_active_connection() while/after
destroying the NMClient can give a dangling pointer and assertion
failure. This will also be covered by test_activate_virtual(). Probably
a similar issue can happen, when a D-Bus object gets removed (without
destroying NMClient altogether).

The fix is that nml_dbus_property_o_clear() needs to clear "nmobj". That
is correct, because the pointer is no longer valid and should not be there.
And the unit test shows that in fact a pointer is left there, and
clearing it fixes it.

That was different from an earlier attempt to fix this (in commit 62b2aa85e8
('Revert "libnm: fix dangling pointer in public API while destructing NMClient"')),
where clearing the pointer at a different place broke things. That
attempt was wrong, because nml_dbus_property_o_notify_changed() needs to be the
one that sets/clears nmobj field during a regular update. But the case
here is not a regular update, nml_dbus_property_o_clear() happens during
unregister/cleanup, and then we need to clear the pointer.

Fixes: ce0e898fb4 ('libnm: refactor caching of D-Bus objects in NMClient')

https://bugzilla.redhat.com/show_bug.cgi?id=2039331
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/896
See-also: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1064

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1075
2022-01-28 11:01:45 +01:00
..
tests Revert "libnm: fix dangling pointer in public API while destructing NMClient" 2022-01-25 21:40:38 +01:00
libnm.pc.in libnm.pc: plugindir & configdir 2021-11-03 12:19:36 +01:00
libnm.ver openvswitch: Add ovs-dpdk n_rxq property 2022-01-10 22:48:30 +00:00
meson.build build: replace ./tools/generate-docs-nm-property-infos.pl with python script 2021-05-05 15:28:17 +02:00
nm-access-point.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-active-connection.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-checkpoint.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-client.c libnm: fix dangling pointer in "o" properties when unregistering NMObject 2022-01-28 11:01:45 +01:00
nm-dbus-helpers.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-dbus-helpers.h clang-format: use "IndentPPDirectives:None" instead of "BeforeHash" 2021-07-09 08:49:06 +02:00
nm-default-libnm.h build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device-6lowpan.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-adsl.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-bond.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-bridge.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-bt.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-dummy.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device-ethernet.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-generic.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-infiniband.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-ip-tunnel.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-macsec.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-macvlan.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-modem.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-olpc-mesh.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-ovs-bridge.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-ovs-interface.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device-ovs-port.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-ppp.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device-private.h build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device-team.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-tun.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-veth.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-vlan.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-vrf.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-vxlan.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-wifi-p2p.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-wifi.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-device-wimax.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device-wireguard.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device-wpan.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-device.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-dhcp-config.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-dhcp4-config.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-dhcp4-config.h clang-format: use "IndentPPDirectives:None" instead of "BeforeHash" 2021-07-09 08:49:06 +02:00
nm-dhcp6-config.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-dhcp6-config.h clang-format: use "IndentPPDirectives:None" instead of "BeforeHash" 2021-07-09 08:49:06 +02:00
nm-dns-manager.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-dns-manager.h format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-ip-config.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-ip4-config.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-ip4-config.h clang-format: use "IndentPPDirectives:None" instead of "BeforeHash" 2021-07-09 08:49:06 +02:00
nm-ip6-config.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-ip6-config.h clang-format: use "IndentPPDirectives:None" instead of "BeforeHash" 2021-07-09 08:49:06 +02:00
nm-libnm-utils.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-libnm-utils.h format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-object-private.h clang-format: use "IndentPPDirectives:None" instead of "BeforeHash" 2021-07-09 08:49:06 +02:00
nm-object.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-remote-connection-private.h clang-format: use "IndentPPDirectives:None" instead of "BeforeHash" 2021-07-09 08:49:06 +02:00
nm-remote-connection.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-secret-agent-old.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-vpn-connection.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-vpn-editor.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
nm-vpn-plugin-old.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-vpn-service-plugin.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-wifi-p2p-peer.c format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00
nm-wimax-nsp.c build: move "libnm/" to "src/" and split it 2021-02-24 12:48:37 +01:00
README.md all: add some README.md files describing the purpose of our sources 2021-08-19 17:51:11 +02:00

libnm-client-impl

libnm is NetworkManager's client API. This API consists of two parts:

  • the handling of connections (NMConnection), implemented by libnm-core-impl.
  • the caching of D-Bus API (NMClient), implemented by libnm-client-impl.

This directory contains the implementation of the second part. As such, it will be statically linked with libnm-core-impl to make libnm. Also, it cannot be used by the daemon.