1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
Restore support for IPv4-compatible addresses, which was dropped upstream
on 2017-10-04 (Debian version 0.20221205).
--- a/inetd.c
+++ b/inetd.c
@@ -499,6 +499,7 @@ dg_badinput(struct sockaddr *sa)
case AF_INET:
in.s_addr = ntohl(((struct sockaddr_in *)sa)->sin_addr.s_addr);
port = ntohs(((struct sockaddr_in *)sa)->sin_port);
+ v4chk:
if (IN_MULTICAST(in.s_addr))
goto bad;
switch ((in.s_addr & 0xff000000) >> 24) {
@@ -514,12 +515,16 @@ dg_badinput(struct sockaddr *sa)
if (IN6_IS_ADDR_MULTICAST(in6) || IN6_IS_ADDR_UNSPECIFIED(in6))
goto bad;
/*
- * OpenBSD does not support IPv4-mapped and
- * IPv4-compatible IPv6 addresses (RFC2553). We should
- * drop the packet.
+ * OpenBSD does not support IPv4 mapped address (RFC2553
+ * inbound behavior) at all. We should drop it.
*/
- if (IN6_IS_ADDR_V4MAPPED(in6) || IN6_IS_ADDR_V4COMPAT(in6))
+ if (IN6_IS_ADDR_V4MAPPED(in6))
goto bad;
+ if (IN6_IS_ADDR_V4COMPAT(in6)) {
+ memcpy(&in, &in6->s6_addr[12], sizeof(in));
+ in.s_addr = ntohl(in.s_addr);
+ goto v4chk;
+ }
break;
default:
/* Unsupported AF */
|