NetworkManager/src/core/devices
Beniamino Galvani a8329587c8 device: fix bug when deactivating port connections asynchronously
When the attach_port()/detach_port() methods do not return immediately
(currently, only for OVS ports), the following situation can arise:

 - nm_device_controller_attach_port() starts the attachment by sending
   the command to ovsdb. Note that here we don't set
   `PortInfo->port_is_attached` to TRUE yet; that happens only after
   the asynchronous command returns;

 - the activation of the port gets interrupted because the connection
   is deleted;

 - the port device enters the deactivating state, triggering function
   port_state_changed()

 - the function calls nm_device_controller_release_port() which checks
   whether the port is already attached; since
   `PortInfo->port_is_attached` is not set yet, it assumes the port
   doesn't need to be detached;

 - in the meantime, the ovsdb operation succeeds. As a consequence,
   the kernel link is created even if the connection no longer exists.

Fix this by turning `port_is_attached` into a tri-state variable that
also tracks when the port is attaching. When it is, we need to perform
an explicit detach during deactivation.

Fixes: 9fcbc6b37d ('device: make attach_port() asynchronous')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2043

Resolves: https://issues.redhat.com/browse/RHEL-58026
2024-09-26 15:02:59 +02:00
..
adsl core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
bluetooth core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
ovs ovs: fix assertion failure in netdev datapath mode 2024-09-11 05:20:46 +00:00
team core: rename sys-iface-state to managed-type internally 2024-08-28 15:35:56 +02:00
tests lldp: use new libnm-lldp instead of systemd's sd_lldp_rx 2022-10-25 10:59:01 +02:00
wifi src: drop most master references from the code 2024-08-09 15:47:32 +02:00
wwan Revert "wwan: Ensure we get existing objects on reset" 2024-07-22 15:21:44 +02:00
meson.build all: move "src/" directory to "src/core/" 2021-02-08 09:56:41 +01:00
nm-device-6lowpan.c core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
nm-device-6lowpan.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-bond.c core: rename sys-iface-state to managed-type internally 2024-08-28 15:35:56 +02:00
nm-device-bond.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-bridge.c core: rename sys-iface-state to managed-type internally 2024-08-28 15:35:56 +02:00
nm-device-bridge.h device: support reapplying bridge-port VLANs 2024-08-21 07:29:37 +02:00
nm-device-dummy.c core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
nm-device-dummy.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-ethernet-utils.c all: add "src/core/nm-default-daemon.h" as replacement for "nm-default.h" 2021-02-09 12:38:18 +01:00
nm-device-ethernet-utils.h all: move "src/" directory to "src/core/" 2021-02-08 09:56:41 +01:00
nm-device-ethernet.c core: rename sys-iface-state to managed-type internally 2024-08-28 15:35:56 +02:00
nm-device-ethernet.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-factory.c ipvlan: add support to IPVLAN interface 2024-09-18 13:19:42 +02:00
nm-device-factory.h core: persist state of software generic devices across restarts 2024-02-21 11:49:20 +01:00
nm-device-generic.c device: support creating generic devices via device-handler 2024-02-21 11:49:19 +01:00
nm-device-generic.h device: support creating generic devices via device-handler 2024-02-21 11:49:19 +01:00
nm-device-hsr.c hsr: drop supervision-address from HSR setting 2023-12-19 13:54:21 +01:00
nm-device-hsr.h HSR: add support to HSR/PRP interface 2023-12-05 08:05:56 +01:00
nm-device-infiniband.c core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
nm-device-infiniband.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-ip-tunnel.c device: honor the @check_properties flag 2023-03-16 12:00:41 +01:00
nm-device-ip-tunnel.h devices: support VTI tunnels 2022-12-21 14:04:44 +01:00
nm-device-ipvlan.c ipvlan: add support to IPVLAN interface 2024-09-18 13:19:42 +02:00
nm-device-ipvlan.h ipvlan: add support to IPVLAN interface 2024-09-18 13:19:42 +02:00
nm-device-logging.h core: log the device type when it can be ambiguous 2023-06-12 11:17:09 +02:00
nm-device-loopback.c all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-loopback.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-macsec.c macsec: support the offload property 2024-02-21 11:48:43 +01:00
nm-device-macsec.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-macvlan.c device: honor the @check_properties flag 2023-03-16 12:00:41 +01:00
nm-device-macvlan.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-ppp.c device: add @check_properties argument to check_connection_compatible() 2023-03-16 12:00:40 +01:00
nm-device-ppp.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-private.h src: drop most slave references from the code 2024-08-09 15:47:32 +02:00
nm-device-tun.c core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
nm-device-tun.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-utils.c core: rename NM_DEVICE_MANAGED_TYPE_MANAGED to _TYPE_FULL 2024-08-28 15:35:56 +02:00
nm-device-utils.h core: rename NM_DEVICE_MANAGED_TYPE_MANAGED to _TYPE_FULL 2024-08-28 15:35:56 +02:00
nm-device-veth.c veth: fix detection of existing interfaces in create_and_realize() 2022-12-19 10:47:13 +01:00
nm-device-veth.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-vlan.c core: rename sys-iface-state to managed-type internally 2024-08-28 15:35:56 +02:00
nm-device-vlan.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-vrf.c src: drop most slave references from the code 2024-08-09 15:47:32 +02:00
nm-device-vrf.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-vxlan.c core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
nm-device-vxlan.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-wireguard.c core: rename sys-iface-state to managed-type internally 2024-08-28 15:35:56 +02:00
nm-device-wireguard.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device-wpan.c core: mark deprecated D-Bus API as deprecated in Introspect() 2024-01-16 09:28:18 +01:00
nm-device-wpan.h all: use _NM_G_TYPE_CHECK_INSTANCE_CAST() for internal uses 2022-12-16 10:55:03 +01:00
nm-device.c device: fix bug when deactivating port connections asynchronously 2024-09-26 15:02:59 +02:00
nm-device.h core: rename sys-iface-state to managed-type internally 2024-08-28 15:35:56 +02:00
nm-lldp-listener.c lldp: fix crash dereferencing NULL pointer during debug logging 2024-08-19 12:51:34 +02:00
nm-lldp-listener.h format: reformat source tree with clang-format 13.0 2021-11-29 09:31:09 +00:00