]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Reduce sizeof isc_sockaddr from 152 to 48 bytes
authorOndřej Surý <ondrej@isc.org>
Tue, 12 Sep 2023 07:21:53 +0000 (09:21 +0200)
committerOndřej Surý <ondrej@isc.org>
Wed, 22 Jan 2025 13:12:38 +0000 (14:12 +0100)
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
lib/isc/include/isc/sockaddr.h
lib/isc/netaddr.c
lib/isc/sockaddr.c

index e41bf2ca4eedab6b3d315f907ca05c2bd36089d6..cc9fb826d9e2fae18572bb0f04d1c731fdc64de0 100644 (file)
@@ -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);
 
index 5d13487183d32db8658275ee45b676647580e255..85343d376db1d09ca2e8aeacba69425ae6f24992 100644 (file)
  */
 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;
index b763f5b0fc6e2d5f8b420b40b6ba451b7bbbb872..f8ce68a5dca4af7e1068c0852cab818edbce09de 100644 (file)
@@ -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();
        }
index 1424259a9fce78e34b47b35dcd1531bfaa9e0732..3aee991e0d71bafbf92bb7e156faf9c9e977c7d1 100644 (file)
@@ -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;
        }