diff options
| author | Paul Donald | 2025-12-18 04:01:14 +0000 |
|---|---|---|
| committer | Álvaro Fernández Rojas | 2025-12-18 17:19:53 +0000 |
| commit | 0779ee287db5ddb209ae057295a8db0e0a3da4fb (patch) | |
| tree | 3c235948b4c2edf3902e4ef377f21d351378a063 | |
| parent | d69896b0ac7c3a12c6f19972ced6ee09570cc2c2 (diff) | |
| download | odhcpd-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.c | 8 |
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) }, }; |