]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use memmove in isc_sockaddr_fromin/isc_sockaddr_fromin6
authorAram Sargsyan <aram@isc.org>
Wed, 22 Jul 2026 12:18:59 +0000 (12:18 +0000)
committerArаm Sаrgsyаn <aram@isc.org>
Thu, 23 Jul 2026 10:58:59 +0000 (10:58 +0000)
Use memmove instead of direct assignment from the source pointer
because the source pointer is not guaranteed to be correctly
aligned.

lib/isc/sockaddr.c

index cd1d7eb74fbe1a4e540d50364da9f1d53b2783f9..03a0d89054db33ddb8d209ffdf045a2a225f9542 100644 (file)
@@ -260,7 +260,8 @@ isc_sockaddr_fromin(isc_sockaddr_t *sockaddr, const struct in_addr *ina,
                    in_port_t port) {
        memset(sockaddr, 0, sizeof(*sockaddr));
        sockaddr->type.sin.sin_family = AF_INET;
-       sockaddr->type.sin.sin_addr = *ina;
+       /* Use memmove to avoid possible misaligned access. */
+       memmove(&sockaddr->type.sin.sin_addr, ina, sizeof(*ina));
        sockaddr->type.sin.sin_port = htons(port);
        sockaddr->length = sizeof(sockaddr->type.sin);
        ISC_LINK_INIT(sockaddr, link);
@@ -285,7 +286,8 @@ isc_sockaddr_fromin6(isc_sockaddr_t *sockaddr, const struct in6_addr *ina6,
                     in_port_t port) {
        memset(sockaddr, 0, sizeof(*sockaddr));
        sockaddr->type.sin6.sin6_family = AF_INET6;
-       sockaddr->type.sin6.sin6_addr = *ina6;
+       /* Use memmove to avoid possible misaligned access. */
+       memmove(&sockaddr->type.sin6.sin6_addr, ina6, sizeof(*ina6));
        sockaddr->type.sin6.sin6_port = htons(port);
        sockaddr->length = sizeof(sockaddr->type.sin6);
        ISC_LINK_INIT(sockaddr, link);