blob: 7b3e1361009bb5d6b41bbccc9b2df9c9818b2b6f [file] [log] [blame] [raw]
Allow forwarding IPv4 packets from/to 127.0.0.0/8 except 127.0.0.1.
diff -ru --exclude-from freebsd-src-diff-exclude-names --new-file /var/archive3/public/freebsd-releng-10.4-src/sys/net/flowtable.c freebsd-10.4/sys/net/flowtable.c
--- /var/archive3/public/freebsd-releng-10.4-src/sys/net/flowtable.c 2017-09-29 08:20:07.000000000 +0800
+++ freebsd-10.4/sys/net/flowtable.c 2022-11-27 00:18:01.170901000 +0800
@@ -199,9 +199,10 @@
ip = mtod(m, struct ip *);
if (ip->ip_src.s_addr == ip->ip_dst.s_addr ||
- (ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET ||
- (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET)
+ ntohl(ip->ip_dst.s_addr) == INADDR_LOOPBACK ||
+ ntohl(ip->ip_src.s_addr) == INADDR_LOOPBACK) {
return (NULL);
+ }
fibnum = M_GETFIB(m);
diff -ru --exclude-from freebsd-src-diff-exclude-names --new-file /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/in.c freebsd-10.4/sys/netinet/in.c
--- /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/in.c 2017-09-29 08:20:06.000000000 +0800
+++ freebsd-10.4/sys/netinet/in.c 2022-11-26 20:53:07.717981000 +0800
@@ -139,11 +139,7 @@
if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i) || IN_LINKLOCAL(i))
return (0);
- if (IN_CLASSA(i)) {
- net = i & IN_CLASSA_NET;
- if (net == 0 || net == (IN_LOOPBACKNET << IN_CLASSA_NSHIFT))
- return (0);
- }
+ if (!(i & 0xff000000)) return 0;
return (1);
}
diff -ru --exclude-from freebsd-src-diff-exclude-names --new-file /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/ip_fastfwd.c freebsd-10.4/sys/netinet/ip_fastfwd.c
--- /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/ip_fastfwd.c 2017-09-29 08:20:06.000000000 +0800
+++ freebsd-10.4/sys/netinet/ip_fastfwd.c 2022-11-27 00:23:34.897572000 +0800
@@ -273,10 +273,10 @@
}
/*
- * Is packet from or to 127/8?
+ * Is packet from or to 127.0.0.1?
*/
- if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET ||
- (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) {
+ if (ntohl(ip->ip_dst.s_addr) == INADDR_LOOPBACK ||
+ ntohl(ip->ip_src.s_addr) == INADDR_LOOPBACK) {
IPSTAT_INC(ips_badaddr);
goto drop;
}
diff -ru --exclude-from freebsd-src-diff-exclude-names --new-file /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/ip_input.c freebsd-10.4/sys/netinet/ip_input.c
--- /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/ip_input.c 2017-09-29 08:20:06.000000000 +0800
+++ freebsd-10.4/sys/netinet/ip_input.c 2022-11-27 00:21:46.854283000 +0800
@@ -411,9 +411,10 @@
IP_PROBE(receive, NULL, NULL, ip, m->m_pkthdr.rcvif, ip, NULL);
/* 127/8 must not appear on wire - RFC1122 */
+ /* Modified to filter 127.0.0.1 only */
ifp = m->m_pkthdr.rcvif;
- if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET ||
- (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) {
+ if (ntohl(ip->ip_dst.s_addr) == INADDR_LOOPBACK ||
+ ntohl(ip->ip_src.s_addr) == INADDR_LOOPBACK) {
if ((ifp->if_flags & IFF_LOOPBACK) == 0) {
IPSTAT_INC(ips_badaddr);
goto bad;
diff -ru --exclude-from freebsd-src-diff-exclude-names --new-file /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/ip_output.c freebsd-10.4/sys/netinet/ip_output.c
--- /var/archive3/public/freebsd-releng-10.4-src/sys/netinet/ip_output.c 2017-09-29 08:20:06.000000000 +0800
+++ freebsd-10.4/sys/netinet/ip_output.c 2022-11-27 00:22:12.011746000 +0800
@@ -577,8 +577,9 @@
passout:
/* 127/8 must not appear on wire - RFC1122. */
- if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET ||
- (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) {
+ /* Modified to filter 127.0.0.1 only */
+ if (ntohl(ip->ip_dst.s_addr) == INADDR_LOOPBACK ||
+ ntohl(ip->ip_src.s_addr) == INADDR_LOOPBACK) {
if ((ifp->if_flags & IFF_LOOPBACK) == 0) {
IPSTAT_INC(ips_badaddr);
error = EADDRNOTAVAIL;