From a7630c2c620b8996be714dcdfbf0e74d367490d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 12 Sep 2023 09:21:53 +0200 Subject: [PATCH] Reduce sizeof isc_sockaddr from 152 to 48 bytes After removing sockaddr_unix from isc_sockaddr, we can also remove sockaddr_storage and reduce the isc_sockaddr size from 152 bytes to just 48 bytes needed to hold IPv6 addresses. (cherry picked from commit 2367b6a2e1770df42415a1813b036814a945843b) --- lib/irs/resconf.c | 2 +- lib/isc/include/isc/sockaddr.h | 8 +++----- lib/isc/netaddr.c | 4 ---- lib/isc/sockaddr.c | 35 +++++----------------------------- 4 files changed, 9 insertions(+), 40 deletions(-) diff --git a/lib/irs/resconf.c b/lib/irs/resconf.c index e41bf2ca4e..cc9fb826d9 100644 --- a/lib/irs/resconf.c +++ b/lib/irs/resconf.c @@ -247,7 +247,7 @@ add_server(isc_mem_t *mctx, const char *address_str, goto cleanup; } address->length = (unsigned int)res->ai_addrlen; - memmove(&address->type.ss, res->ai_addr, res->ai_addrlen); + memmove(&address->type.sa, res->ai_addr, res->ai_addrlen); ISC_LINK_INIT(address, link); ISC_LIST_APPEND(*nameservers, address, link); diff --git a/lib/isc/include/isc/sockaddr.h b/lib/isc/include/isc/sockaddr.h index 5d13487183..85343d376d 100644 --- a/lib/isc/include/isc/sockaddr.h +++ b/lib/isc/include/isc/sockaddr.h @@ -29,11 +29,9 @@ */ struct isc_sockaddr { union { - struct sockaddr sa; - struct sockaddr_in sin; - struct sockaddr_in6 sin6; - struct sockaddr_storage ss; - struct sockaddr_un sunix; + struct sockaddr sa; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; } type; unsigned int length; /* XXXRTH beginning? */ ISC_LINK(struct isc_sockaddr) link; diff --git a/lib/isc/netaddr.c b/lib/isc/netaddr.c index b763f5b0fc..f8ce68a5dc 100644 --- a/lib/isc/netaddr.c +++ b/lib/isc/netaddr.c @@ -348,10 +348,6 @@ isc_netaddr_fromsockaddr(isc_netaddr_t *t, const isc_sockaddr_t *s) { memmove(&t->type.in6, &s->type.sin6.sin6_addr, 16); t->zone = s->type.sin6.sin6_scope_id; break; - case AF_UNIX: - memmove(t->type.un, s->type.sunix.sun_path, sizeof(t->type.un)); - t->zone = 0; - break; default: UNREACHABLE(); } diff --git a/lib/isc/sockaddr.c b/lib/isc/sockaddr.c index 1424259a9f..3aee991e0d 100644 --- a/lib/isc/sockaddr.c +++ b/lib/isc/sockaddr.c @@ -137,24 +137,7 @@ isc_sockaddr_totext(const isc_sockaddr_t *sockaddr, isc_buffer_t *target) { ntohs(sockaddr->type.sin6.sin6_port)); break; case AF_UNIX: - plen = strlen(sockaddr->type.sunix.sun_path); - if (plen >= isc_buffer_availablelength(target)) { - return ISC_R_NOSPACE; - } - - isc_buffer_putmem( - target, - (const unsigned char *)sockaddr->type.sunix.sun_path, - plen); - - /* - * Null terminate after used region. - */ - isc_buffer_availableregion(target, &avail); - INSIST(avail.length >= 1); - avail.base[0] = '\0'; - - return ISC_R_SUCCESS; + return ISC_R_NOTIMPLEMENTED; default: return ISC_R_FAILURE; } @@ -461,16 +444,9 @@ isc_sockaddr_isnetzero(const isc_sockaddr_t *sockaddr) { } isc_result_t -isc_sockaddr_frompath(isc_sockaddr_t *sockaddr, const char *path) { - if (strlen(path) >= sizeof(sockaddr->type.sunix.sun_path)) { - return ISC_R_NOSPACE; - } - memset(sockaddr, 0, sizeof(*sockaddr)); - sockaddr->length = sizeof(sockaddr->type.sunix); - sockaddr->type.sunix.sun_family = AF_UNIX; - strlcpy(sockaddr->type.sunix.sun_path, path, - sizeof(sockaddr->type.sunix.sun_path)); - return ISC_R_SUCCESS; +isc_sockaddr_frompath(isc_sockaddr_t *sockaddr ISC_ATTR_UNUSED, + const char *path ISC_ATTR_UNUSED) { + return ISC_R_NOTIMPLEMENTED; } isc_result_t @@ -485,8 +461,7 @@ isc_sockaddr_fromsockaddr(isc_sockaddr_t *isa, const struct sockaddr *sa) { length = sizeof(isa->type.sin6); break; case AF_UNIX: - length = sizeof(isa->type.sunix); - break; + return ISC_R_NOTIMPLEMENTED; default: return ISC_R_NOTIMPLEMENTED; }