udp: a second bind on broadcast address should error with EADDRNOTAVAIL
Testcase: https://gitlab.com/sortix/os-test/-/blob/master/udp/bind-conflict-loopback-broadcast.c
Change-Id: I37c6d05910c3d9573610207b650f1957bccd1e47
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9390
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Diff
src/add-ons/kernel/network/protocols/udp/udp.cpp | 6 ++++++
1 file changed, 6 insertions(+)
@@ -450,6 +450,12 @@
ntohs(otherEndpoint->LocalAddress().Port()));
if (otherEndpoint->LocalAddress().EqualPorts(address)) {
if ((fDomain->address_module->flags & NET_ADDRESS_MODULE_FLAG_BROADCAST_ADDRESS) != 0
&& ((const sockaddr_in *)address)->sin_addr.s_addr == htonl(INADDR_BROADCAST)) {
return EADDRNOTAVAIL;
}
if ((otherEndpoint->Socket()->options
& (SO_REUSEADDR | SO_REUSEPORT)) == 0