Package: openbsd-inetd / 0.20221205-2~deb12u1

ipv4_compatible Patch series | download
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 */