Blame SOURCES/1008-n-dhcp4-probe-forget-lease-after-a-NAK-rh2105088.patch

f817d2
From ecf446c9a2061afb35ff795fec87c04bcb291a3e Mon Sep 17 00:00:00 2001
f817d2
From: Beniamino Galvani <bgalvani@redhat.com>
f817d2
Date: Thu, 5 May 2022 17:50:57 +0200
f817d2
Subject: [PATCH] n-dhcp4/probe: forget lease after a NAK
f817d2
f817d2
If we have a lease and we get a NAK renewing/rebinding it, the lease
f817d2
is lost.
f817d2
f817d2
Without this, probe->current_lease remains set and after the next
f817d2
DISCOVER/OFFER round, any call to n_dhcp4_client_lease_select() will
f817d2
fail at:
f817d2
f817d2
        if (lease->probe->current_lease)
f817d2
                return -ENOTRECOVERABLE;
f817d2
f817d2
As in:
f817d2
f817d2
 [5325.1313] dhcp4 (veth0): send REQUEST of 172.25.1.200 to 255.255.255.255
f817d2
 [5325.1434] dhcp4 (veth0): received NACK from 172.25.1.1
f817d2
 [5325.1435] dhcp4 (veth0): client event 3 (RETRACTED)
f817d2
 [5325.1436] dhcp4 (veth0): send DISCOVER to 255.255.255.255
f817d2
 [5325.1641] dhcp4 (veth0): received OFFER of 172.25.1.200 from 172.25.1.1
f817d2
 [5325.1641] dhcp4 (veth0): client event (OFFER)
f817d2
 [5325.1641] dhcp4 (veth0): selecting lease failed: -131 (ENOTRECOVERABLE)
f817d2
f817d2
Upstream: https://github.com/nettools/n-dhcp4/pull/33
f817d2
Upstream: https://github.com/nettools/n-dhcp4/commit/e4af93228e3772bbb443ec1237252e6a2f3e3dd7
f817d2
f817d2
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/993
f817d2
f817d2
Fixes: e43b1791a382 ('Merge commit 'e23b3c9c3ac86b065eef002fa5c4321cc4a87df2' as 'shared/n-dhcp4'')
f817d2
f817d2
(cherry picked from commit e141cd45d610164ec9a041856677b2ad426c2c20)
f817d2
(cherry picked from commit e056a68d218ad51d801cfaff95afa3f8cbcfa619)
f817d2
(cherry picked from commit 6636c792bd20a692dd33634864e1f0fc14322d79)
f817d2
---
f817d2
 src/n-dhcp4/src/n-dhcp4-c-probe.c | 3 +--
f817d2
 1 file changed, 1 insertion(+), 2 deletions(-)
f817d2
f817d2
diff --git a/src/n-dhcp4/src/n-dhcp4-c-probe.c b/src/n-dhcp4/src/n-dhcp4-c-probe.c
f817d2
index 7f20ac0527..283c1693cf 100644
f817d2
--- a/src/n-dhcp4/src/n-dhcp4-c-probe.c
f817d2
+++ b/src/n-dhcp4/src/n-dhcp4-c-probe.c
f817d2
@@ -995,14 +995,13 @@ static int n_dhcp4_client_probe_transition_nak(NDhcp4ClientProbe *probe) {
f817d2
         case N_DHCP4_CLIENT_PROBE_STATE_RENEWING:
f817d2
         case N_DHCP4_CLIENT_PROBE_STATE_REBINDING:
f817d2
 
f817d2
-                /* XXX */
f817d2
-
f817d2
                 r = n_dhcp4_client_probe_raise(probe,
f817d2
                                                NULL,
f817d2
                                                N_DHCP4_CLIENT_EVENT_RETRACTED);
f817d2
                 if (r)
f817d2
                         return r;
f817d2
 
f817d2
+                probe->current_lease = n_dhcp4_client_lease_unref(probe->current_lease);
f817d2
                 probe->state = N_DHCP4_CLIENT_PROBE_STATE_INIT;
f817d2
                 probe->ns_deferred = n_dhcp4_gettime(CLOCK_BOOTTIME) + probe->ns_nak_restart_delay;
f817d2
                 probe->ns_nak_restart_delay = C_CLAMP(probe->ns_nak_restart_delay * 2u,
f817d2
-- 
f817d2
2.36.1
f817d2