From: David Härdeman Date: Fri, 12 Dec 2025 21:46:31 +0000 (+0100) Subject: odhcpd: fix captive_portal_uri reset X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;ds=sidebyside;p=project%2Fodhcpd.git odhcpd: fix captive_portal_uri reset odhcpd_reload() calls clean_interface() which does a memset() on the given struct iface from iface->ra onwards, so captive_portal_uri and captive_portal_uri_len have to be below iface->ra in order to be zeroed on reload. Otherwise, iface->captive_portal_uri will be free():d, but iface->captive_portal_uri_len could still be > 0. This is a bit of a footgun (one wouldn't normally expect the order of struct members to matter), and should probably be dealt with in a more thorough manner, but I've just done the minimum and added a warning in src/odhcpd.h for now, Signed-off-by: David Härdeman Link: https://github.com/openwrt/odhcpd/pull/345 Signed-off-by: Álvaro Fernández Rojas --- diff --git a/src/odhcpd.h b/src/odhcpd.h index 7b6ac6c..86375ab 100644 --- a/src/odhcpd.h +++ b/src/odhcpd.h @@ -391,9 +391,7 @@ struct interface { struct avl_tree dhcpv4_leases; struct list_head dhcpv4_fr_ips; - // RFC8910 - char *captive_portal_uri; - size_t captive_portal_uri_len; + /* NOTE: everything from this point is zeroed on odhcpd_reload() */ // Services enum odhcpd_mode ra; @@ -494,6 +492,10 @@ struct interface { struct ra_pio *pios; size_t pio_cnt; bool pio_update; + + // RFC8910 + char *captive_portal_uri; + size_t captive_portal_uri_len; }; extern struct avl_tree interfaces;