git: f3eb1514ce44 - main - ctld: Tighten parsing of IPv6 addresses for initiator-portal
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 11 Apr 2025 14:04:00 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=f3eb1514ce44aea5d288a74f34a0c6925ecd43ea
commit f3eb1514ce44aea5d288a74f34a0c6925ecd43ea
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2025-04-11 14:01:48 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2025-04-11 14:01:48 +0000
ctld: Tighten parsing of IPv6 addresses for initiator-portal
If an address starts with a [ character, require that it ends with a ]
character. Also, if an address starts with a [ character, assume it
is an IPv6 address.
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D49647
---
usr.sbin/ctld/ctld.cc | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/usr.sbin/ctld/ctld.cc b/usr.sbin/ctld/ctld.cc
index 08ac91a75c21..bc794815830c 100644
--- a/usr.sbin/ctld/ctld.cc
+++ b/usr.sbin/ctld/ctld.cc
@@ -319,14 +319,17 @@ auth_portal_new(struct auth_group *ag, const char *portal)
ap->ap_initiator_portal = checked_strdup(portal);
mask = str = checked_strdup(portal);
net = strsep(&mask, "/");
- if (net[0] == '[')
+ if (net[0] == '[') {
net++;
- len = strlen(net);
- if (len == 0)
- goto error;
- if (net[len - 1] == ']')
+ len = strlen(net);
+ if (len < 2)
+ goto error;
+ if (net[len - 1] != ']')
+ goto error;
net[len - 1] = 0;
- if (strchr(net, ':') != NULL) {
+ } else if (net[0] == '\0')
+ goto error;
+ if (str[0] == '[' || strchr(net, ':') != NULL) {
struct sockaddr_in6 *sin6 =
(struct sockaddr_in6 *)&ap->ap_sa;