]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Patch from Theo Markettos: apparently "BSD-derived IP stacks fall over when
authorJacob Nevins <jacobn@chiark.greenend.org.uk>
Tue, 3 Feb 2004 14:47:43 +0000 (14:47 +0000)
committerJacob Nevins <jacobn@chiark.greenend.org.uk>
Tue, 3 Feb 2004 14:47:43 +0000 (14:47 +0000)
trying to bind to the localhost interface with a sockaddr_in which has non-zero
sin_zero fields." Zero sockaddr_in (and sockaddr_in6) before any use.

[originally from svn r3793]

unix/uxnet.c

index cbe67306851029cace168e2873487621d34f8fb0..46b619bd6a42ad5e0bf6695234e602570bcdb432 100644 (file)
@@ -434,6 +434,11 @@ Socket sk_new(SockAddr addr, int port, int privport, int oobinline,
     else
        localport = 0;                 /* just use port 0 (ie kernel picks) */
 
+    /* BSD IP stacks need sockaddr_in zeroed before filling in */
+    memset(&a,'\0',sizeof(struct sockaddr_in));
+#ifdef IPV6
+    memset(&a6,'\0',sizeof(struct sockaddr_in6));
+#endif
     /* Loop round trying to bind */
     while (1) {
        int retcode;
@@ -574,7 +579,12 @@ Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only)
 
     setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char *)&on, sizeof(on));
 
+    /* BSD IP stacks need sockaddr_in zeroed before filling in */
+    memset(&a,'\0',sizeof(struct sockaddr_in));
 #ifdef IPV6
+#if 0
+    memset(&a6,'\0',sizeof(struct sockaddr_in6));
+#endif
     hints.ai_flags = AI_NUMERICHOST;
     hints.ai_family = AF_UNSPEC;
     hints.ai_socktype = 0;