From 9a4abe9909c2acbadade4434a1fc1bbb89f6f478 Mon Sep 17 00:00:00 2001 From: Heran Yang Date: Thu, 10 Sep 2026 16:14:09 +0800 Subject: [PATCH] network: find pending address in IPv4 ACD callback When IPv4 ACD is enabled for a DHCPv4 address, the address remains in the request queue until ACD succeeds. Hence, when ACD detects a conflict, the address may not be present in link->addresses yet. on_acd() currently looks up the address with address_get(), which only searches link->addresses. This makes the callback return early and prevents dhcp4_address_on_conflict() from sending DHCPDECLINE. Use address_get_harder(), which also looks up pending address requests. Fixes #39460 (cherry picked from commit 2aed6d9ad7226dad88a2386533ba63f6fc408c7f) --- src/network/networkd-ipv4acd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/networkd-ipv4acd.c b/src/network/networkd-ipv4acd.c index 5e6090231a..86f2745cd1 100644 --- a/src/network/networkd-ipv4acd.c +++ b/src/network/networkd-ipv4acd.c @@ -152,7 +152,7 @@ static void on_acd(sd_ipv4acd *acd, int event, void *userdata) { void *val, *key; HASHMAP_FOREACH_KEY(val, key, link->ipv4acd_by_address) if (val == acd) { - (void) address_get(link, key, &address); + (void) address_get_harder(link, key, &address); break; }