From: David Gibson <david@gibson.dropbear.id.au>
To: passt-dev@passt.top, Stefano Brivio <sbrivio@redhat.com>
Cc: David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH v2 3/6] Use IPV4_IS_LOOPBACK more widely
Date: Fri, 4 Nov 2022 14:10:34 +1100 [thread overview]
Message-ID: <20221104031037.3866034-4-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20221104031037.3866034-1-david@gibson.dropbear.id.au>
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>
---
conf.c | 8 ++++----
udp.c | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/conf.c b/conf.c
index 6c2a9ad..c36403d 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);
@@ -1389,7 +1389,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;
@@ -1425,7 +1425,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;
--
@@ -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;
--
2.38.1
next prev parent reply other threads:[~2022-11-04 3:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-04 3:10 [PATCH v2 0/6] Improve IPv4 address endian handling and related bug fixes David Gibson
2022-11-04 3:10 ` [PATCH v2 1/6] Correct some missing endian conversions of IPv4 addresses David Gibson
2022-11-04 3:10 ` [PATCH v2 2/6] Minor improvements to IPv4 netmask handling David Gibson
2022-11-04 3:10 ` David Gibson [this message]
2022-11-04 3:10 ` [PATCH v2 4/6] Use typing to reduce chances of IPv4 endianness errors David Gibson
2022-11-04 3:10 ` [PATCH v2 5/6] Use endian-safer typing in struct tap4_l4_t David Gibson
2022-11-04 3:10 ` [PATCH v2 6/6] tcp: Correct function comments for address types David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221104031037.3866034-4-david@gibson.dropbear.id.au \
--to=david@gibson.dropbear.id.au \
--cc=passt-dev@passt.top \
--cc=sbrivio@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).