summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Donald2025-12-18 04:01:14 +0000
committerÁlvaro Fernández Rojas2025-12-18 17:19:53 +0000
commit0779ee287db5ddb209ae057295a8db0e0a3da4fb (patch)
tree3c235948b4c2edf3902e4ef377f21d351378a063
parentd69896b0ac7c3a12c6f19972ced6ee09570cc2c2 (diff)
downloadodhcpd-0779ee287db5ddb209ae057295a8db0e0a3da4fb.tar.gz
dhcpv6-ia: reconfigure message length bug fix
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) (cherry picked from commit 3fda5f8b121bf58f8ef8e797fe6bfd7f4f340653) Signed-off-by: Paul Donald <newtwen+github@gmail.com> Link: https://github.com/openwrt/odhcpd/pull/361 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
-rw-r--r--src/dhcpv6-ia.c8
1 files 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) },
};