From af1bbe8bd93e2f1494072228d883d7ddea2baa12 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Mon, 19 Dec 2022 10:18:46 +0100 Subject: [PATCH] device: fix condition for scheduling stage3 after carrier change When the device gets carrier, we should reschedule stage3 even if the device state is not exactly IP_CONFIG. For example if IPv6 autoconf is waiting for carrier and IPv6 is may-fail=yes, the device could be already ACTIVATED because manual IPv4 succeeded; after getting carrier, we need to call nm_device_activate_schedule_stage3_ip_config() to start IPv6 autoconf. Fixes: bcf31a9b299b ('device: fix assertion failure on master carrier change') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1165 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1485 (cherry picked from commit 6ea924fa7472fb7126f8de16de8838093552e2ec) --- src/core/devices/nm-device.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index be4daffc79..a723bf7f20 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -6392,7 +6392,8 @@ carrier_changed(NMDevice *self, gboolean carrier) if (carrier) { /* If needed, also resume IP configuration that is * waiting for carrier. */ - if (priv->state == NM_DEVICE_STATE_IP_CONFIG) + if (priv->state >= NM_DEVICE_STATE_IP_CONFIG + && priv->state <= NM_DEVICE_STATE_ACTIVATED) nm_device_activate_schedule_stage3_ip_config(self, FALSE); return; }