From 3fda5f8b121bf58f8ef8e797fe6bfd7f4f340653 Mon Sep 17 00:00:00 2001 From: Paul Donald Date: Thu, 18 Dec 2025 05:01:14 +0100 Subject: [PATCH] dhcpv6-ia: reconfigure message length bug fix MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit follow-up to ae16476bcad27049f82e3043e88958405096c4bb Now, the lengths are actual encoded size, resulting in: DHCPv6 Message type: Reconfigure (10) Transaction ID: 0x000000 Server Identifier Option: Server Identifier (2) Length: 10 DUID: 00030001xx DUID Type: link-layer address (3) Hardware type: Ethernet (1) Link-layer address: xx Link-layer address (Ethernet): xx Client Identifier Option: Client Identifier (1) Length: 10 DUID: 00030001xx DUID Type: link-layer address (3) Hardware type: Ethernet (1) Link-layer address: xx Link-layer address (Ethernet): xx Reconfigure Message Option: Reconfigure Message (19) Length: 1 Reconfigure message type: Renew (5) The previous calculation would count a full DUID buffer length, but the buffer size was not adjusted based on the used size, resulting in DHCPv6 RECONF messages like: DHCPv6 Message type: Reconfigure (10) Transaction ID: 0x000000 Server Identifier Option: Server Identifier (2) Length: 10 DUID: 0003XXX DUID Type: link-layer address (3) Hardware type: Ethernet (1) Link-layer address: XXX Link-layer address (Ethernet): XXX DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 Client Identifier Option: Client Identifier (1) Length: 18 DUID: 0004xxx DUID Type: Universally Unique IDentifier (UUID) (4) UUID: xxx DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 DHCP option 0 Option: Unknown (0) Length: 0 Reconfigure Message Option: Reconfigure Message (19) Length: 1 Reconfigure message type: Renew (5) Signed-off-by: Paul Donald Link: https://github.com/openwrt/odhcpd/pull/361 Signed-off-by: Álvaro Fernández Rojas --- src/dhcpv6-ia.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c index 5af952d..d1881ee 100644 --- a/src/dhcpv6-ia.c +++ b/src/dhcpv6-ia.c @@ -215,10 +215,14 @@ static int send_reconf(struct dhcpv6_lease *assign) memcpy(clientid.data, assign->duid, assign->duid_len); + size_t serverid_len, clientid_len; + serverid_len = sizeof(serverid.code) + sizeof(serverid.len) + ntohs(serverid.len); + clientid_len = sizeof(clientid.code) + sizeof(clientid.len) + ntohs(clientid.len); + struct iovec iov[IOV_TOTAL] = { [IOV_HDR] = { &hdr, sizeof(hdr) }, - [IOV_SERVERID] = { &serverid, sizeof(serverid) }, - [IOV_CLIENTID] = { &clientid, sizeof(clientid) }, + [IOV_SERVERID] = { &serverid, serverid_len }, + [IOV_CLIENTID] = { &clientid, clientid_len }, [IOV_MESSAGE] = { &message, sizeof(message) }, [IOV_AUTH] = { &auth, sizeof(auth) }, }; -- 2.30.2