dhcp: Fix destination port check in packet filter
authorTobias Brunner <tobias@strongswan.org>
Fri, 16 Mar 2018 08:59:25 +0000 (09:59 +0100)
committerTobias Brunner <tobias@strongswan.org>
Fri, 18 May 2018 16:04:01 +0000 (18:04 +0200)
commite8b5c7b94ecca6d16748b210fd62b64826a5d2f7
treebdc0b0d40f03bd961f7cfdf229c389bec8c0b014
parent646a492538aac4895ac728d3b867db0beeb61d22
dhcp: Fix destination port check in packet filter

The previous code compared the port in the packet to the client port and, if
successful, checked it also against the server port, which, therefore, never
matched, but due to incorrect offsets did skip the BPF_JA.  If the client port
didn't match the code also skipped to the instruction after the BPF_JA.
However, the latter was incorrect also and processing would have continued at
the next instruction anyway.  Basically, DHCP packets to any port were accepted.

What's not fixed with this is that the kernel returns an ICMP Port
unreachable for packets sent to the server port (67) because we don't
have a socket bound to it.

Fixes: f0212e8837b5 ("Accept DHCP replies on bootps port, as we act as a relay agent if server address configured")
src/libcharon/plugins/dhcp/dhcp_socket.c