get_ai: Allocate socket address space for struct sockaddr_union

Currently socket address space is allocated by the address family. When Netd
does IPv6 prefix synthesis on an IPv4 resource record, Netd can't directly cast
a sockaddr_in pointer to a sockaddr_in6 pointer for reporting synthesized IPv6
address. The size of sockaddr_union is enough for either an IPv6 or IPv4
address. It allows that a socket address can be directly cast as
a protocol-specific (IPv4/IPv6) address structure.

Bug: 78545619
Test: netd_{unit,integration}_test pass
Change-Id: I49fcba89a7de59a5ca49933f84887177c5500425
diff --git a/resolv/getaddrinfo.cpp b/resolv/getaddrinfo.cpp
index fbf69a0..e4a850a 100644
--- a/resolv/getaddrinfo.cpp
+++ b/resolv/getaddrinfo.cpp
@@ -731,12 +731,12 @@
     assert(afd != NULL);
     assert(addr != NULL);
 
-    ai = (struct addrinfo*) malloc(sizeof(struct addrinfo) + (afd->a_socklen));
+    ai = (struct addrinfo*) malloc(sizeof(struct addrinfo) + sizeof(sockaddr_union));
     if (ai == NULL) return NULL;
 
     memcpy(ai, pai, sizeof(struct addrinfo));
     ai->ai_addr = (struct sockaddr*) (void*) (ai + 1);
-    memset(ai->ai_addr, 0, (size_t) afd->a_socklen);
+    memset(ai->ai_addr, 0, sizeof(sockaddr_union));
 
     ai->ai_addrlen = afd->a_socklen;
     ai->ai_addr->sa_family = ai->ai_family = afd->a_af;