From 97d44fbf4b379c0fd196256689227ae6e980081e Mon Sep 17 00:00:00 2001 From: d00f <8052722+DrDoof@users.noreply.github.com> Date: Sun, 6 Sep 2026 20:30:40 +0200 Subject: [PATCH] dhcp: drop the 16-bit swap on the 32-bit transaction id The id was built and checked with HTONS(), which casts to 16 bits, so the top half of the 32-bit transaction id was thrown away and the rest byte swapped. The id is opaque: the client only has to receive its own value back, so there is no byte order to honour and no reason to narrow it. Assign and compare the field directly, so the full 32-bit id round-trips. --- dhcp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhcp.c b/dhcp.c index 9d92acb5..6cfa373a 100644 --- a/dhcp.c +++ b/dhcp.c @@ -94,7 +94,7 @@ void dhcp_prepare_request(void) DHCP_P->hw_len = 6; DHCP_P->hops = 0; - DHCP_P->tid = HTONS(dhcp_state.transaction_id); + DHCP_P->tid = dhcp_state.transaction_id; DHCP_P->delay = HTONS(0); DHCP_P->flags = 0; // Clear fields client_ip to bootp_file @@ -300,7 +300,7 @@ void parse_opts(void) void parse_dhcp(void) { - if (DHCP_P->tid != HTONS(dhcp_state.transaction_id)) + if (DHCP_P->tid != dhcp_state.transaction_id) return; if (DHCP_P->cookie[0] != 0x63 || DHCP_P->cookie[1] != 0x82 || DHCP_P->cookie[2] != 0x53 || DHCP_P->cookie[3] != 0x63) return;