aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-11-04 14:10:34 +1100
committerStefano Brivio <sbrivio@redhat.com>2022-11-04 12:04:21 +0100
commitdd3470d9a92bd2fc83b3afd5ff9490b73de6a58c (patch)
tree93086c8b07605cf31d34569dc61d42b0e3973cf6
parentdd09cceaee216afc90101ee5c3a2d57b1ca1a042 (diff)
downloadpasst-dd3470d9a92bd2fc83b3afd5ff9490b73de6a58c.tar
passt-dd3470d9a92bd2fc83b3afd5ff9490b73de6a58c.tar.gz
passt-dd3470d9a92bd2fc83b3afd5ff9490b73de6a58c.tar.bz2
passt-dd3470d9a92bd2fc83b3afd5ff9490b73de6a58c.tar.lz
passt-dd3470d9a92bd2fc83b3afd5ff9490b73de6a58c.tar.xz
passt-dd3470d9a92bd2fc83b3afd5ff9490b73de6a58c.tar.zst
passt-dd3470d9a92bd2fc83b3afd5ff9490b73de6a58c.zip
Use IPV4_IS_LOOPBACK more widely
This macro checks if an IPv4 address is in the loopback network (127.0.0.0/8). There are two places where we open code an identical check, use the macro instead. There are also a number of places we specifically exclude the loopback address (127.0.0.1), but we should actually be excluding anything in the loopback network. Change those sites to use the macro as well. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--conf.c8
-rw-r--r--udp.c2
2 files changed, 5 insertions, 5 deletions
diff --git a/conf.c b/conf.c
index c6d06ea..3bf7301 100644
--- a/conf.c
+++ b/conf.c
@@ -389,7 +389,7 @@ static void get_dns(struct ctx *c)
dns4 - &c->ip4.dns[0] < ARRAY_SIZE(c->ip4.dns) - 1 &&
inet_pton(AF_INET, p + 1, dns4)) {
/* We can only access local addresses via the gw redirect */
- if (ntohl(*dns4) >> IN_CLASSA_NSHIFT == IN_LOOPBACKNET) {
+ if (IPV4_IS_LOOPBACK(ntohl(*dns4))) {
if (c->no_map_gw) {
*dns4 = 0;
continue;
@@ -1190,7 +1190,7 @@ void conf(struct ctx *c, int argc, char **argv)
inet_pton(AF_INET, optarg, &c->ip4.dns_fwd) &&
c->ip4.dns_fwd != htonl(INADDR_ANY) &&
c->ip4.dns_fwd != htonl(INADDR_BROADCAST) &&
- c->ip4.dns_fwd != htonl(INADDR_LOOPBACK))
+ !IPV4_IS_LOOPBACK(ntohl(c->ip4.dns_fwd)))
break;
err("Invalid DNS forwarding address: %s", optarg);
@@ -1388,7 +1388,7 @@ void conf(struct ctx *c, int argc, char **argv)
inet_pton(AF_INET, optarg, &c->ip4.addr) &&
c->ip4.addr != htonl(INADDR_ANY) &&
c->ip4.addr != htonl(INADDR_BROADCAST) &&
- c->ip4.addr != htonl(INADDR_LOOPBACK) &&
+ !IPV4_IS_LOOPBACK(ntohl(c->ip4.addr)) &&
!IN_MULTICAST(ntohl(c->ip4.addr)))
break;
@@ -1424,7 +1424,7 @@ void conf(struct ctx *c, int argc, char **argv)
inet_pton(AF_INET, optarg, &c->ip4.gw) &&
c->ip4.gw != htonl(INADDR_ANY) &&
c->ip4.gw != htonl(INADDR_BROADCAST) &&
- c->ip4.gw != htonl(INADDR_LOOPBACK))
+ !IPV4_IS_LOOPBACK(ntohl(c->ip4.gw)))
break;
err("Invalid gateway address: %s", optarg);
diff --git a/udp.c b/udp.c
index 4b201d3..7ce533d 100644
--- a/udp.c
+++ b/udp.c
@@ -680,7 +680,7 @@ static void udp_sock_fill_data_v4(const struct ctx *c, int n,
src = ntohl(b->s_in.sin_addr.s_addr);
src_port = ntohs(b->s_in.sin_port);
- if (src >> IN_CLASSA_NSHIFT == IN_LOOPBACKNET ||
+ if (IPV4_IS_LOOPBACK(src) ||
src == INADDR_ANY || src == ntohl(c->ip4.addr_seen)) {
b->iph.saddr = c->ip4.gw;
udp_tap_map[V4][src_port].ts = now->tv_sec;