X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/2dced7af2b695f87fe26496a3e73c219b7880cbc..4bd07ac2140668789aa3ee8ec4dde4a3e0a3bba5:/bsd/kern/uipc_syscalls.c?ds=sidebyside diff --git a/bsd/kern/uipc_syscalls.c b/bsd/kern/uipc_syscalls.c index f44291282..03330fbcb 100644 --- a/bsd/kern/uipc_syscalls.c +++ b/bsd/kern/uipc_syscalls.c @@ -2756,6 +2756,7 @@ getsockaddr(struct socket *so, struct sockaddr **namp, user_addr_t uaddr, { struct sockaddr *sa; int error; + size_t alloclen; if (len > SOCK_MAXADDRLEN) return (ENAMETOOLONG); @@ -2763,7 +2764,12 @@ getsockaddr(struct socket *so, struct sockaddr **namp, user_addr_t uaddr, if (len < offsetof(struct sockaddr, sa_data[0])) return (EINVAL); - MALLOC(sa, struct sockaddr *, len, M_SONAME, M_WAITOK | M_ZERO); + /* + * Workaround for rdar://23362120 + * Allways allocate a buffer that can hold an IPv6 socket address + */ + alloclen = MAX(len, sizeof(struct sockaddr_in6)); + MALLOC(sa, struct sockaddr *, alloclen, M_SONAME, M_WAITOK | M_ZERO); if (sa == NULL) { return (ENOMEM); }