mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-03-20 23:20:36 +01:00
When using the netdev datapath, we wait for the link to appear in different steps: 1. initially, in act_stage3_ip_config() connects to platform's "link-changed" signal to detect when the TUN interface appears; 2. when the interface appears, _netdev_tun_link_cb() schedules _set_ip_ifindex_tun() in a idle handler; 3. _set_ip_ifindex_tun() checks if the link is ready (e.g. if the MAC address is correct) and in that case it reschedules stage3, which will move forward with the activation; 4. if the link is not ready in _set_ip_ifindex_tun(), the function connects again to platform's "link-changed" signal to react to link changes; 5. after the link changes and it is ready, _netdev_tun_link_cb() reschedules stage3, which moves forward with the activation; With the current implementation it is possible that after step 2, if act_stage3_ip_config() runs because it was already scheduled, it registers again to the "link-changed" event; then when _set_ip_ifindex_tun() is invoked it will hit assertion: nm_assert(!priv->wait_link.tun_link_signal_id); Fix this by preventing that the signal gets registered again after step 2. Fixes-test: @ovs_datapath_type_netdev_with_cloned_mac Fixes: |
||
|---|---|---|
| .. | ||
| meson.build | ||
| nm-device-ovs-bridge.c | ||
| nm-device-ovs-bridge.h | ||
| nm-device-ovs-interface.c | ||
| nm-device-ovs-interface.h | ||
| nm-device-ovs-port.c | ||
| nm-device-ovs-port.h | ||
| nm-ovs-factory.c | ||
| nm-ovsdb.c | ||
| nm-ovsdb.h | ||