Module Name: src Committed By: christos Date: Fri Apr 12 21:30:40 UTC 2013
Modified Files: src/sys/netinet: in_pcb.c src/sys/netinet6: in6_pcb.c Log Message: PR/47738: connect(2) to 239.x.y.z should return error but does not. To generate a diff of this commit: cvs rdiff -u -r1.143 -r1.144 src/sys/netinet/in_pcb.c cvs rdiff -u -r1.121 -r1.122 src/sys/netinet6/in6_pcb.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet/in_pcb.c diff -u src/sys/netinet/in_pcb.c:1.143 src/sys/netinet/in_pcb.c:1.144 --- src/sys/netinet/in_pcb.c:1.143 Mon Jun 25 11:28:39 2012 +++ src/sys/netinet/in_pcb.c Fri Apr 12 17:30:40 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: in_pcb.c,v 1.143 2012/06/25 15:28:39 christos Exp $ */ +/* $NetBSD: in_pcb.c,v 1.144 2013/04/12 21:30:40 christos Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -93,7 +93,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in_pcb.c,v 1.143 2012/06/25 15:28:39 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in_pcb.c,v 1.144 2013/04/12 21:30:40 christos Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -470,6 +470,11 @@ in_pcbconnect(void *v, struct mbuf *nam, return (EAFNOSUPPORT); if (sin->sin_port == 0) return (EADDRNOTAVAIL); + + if (IN_MULTICAST(sin->sin_addr.s_addr) && + inp->inp_socket->so_type == SOCK_STREAM) + return EADDRNOTAVAIL; + if (TAILQ_FIRST(&in_ifaddrhead) != 0) { /* * If the destination address is INADDR_ANY, Index: src/sys/netinet6/in6_pcb.c diff -u src/sys/netinet6/in6_pcb.c:1.121 src/sys/netinet6/in6_pcb.c:1.122 --- src/sys/netinet6/in6_pcb.c:1.121 Fri Aug 24 02:03:18 2012 +++ src/sys/netinet6/in6_pcb.c Fri Apr 12 17:30:40 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_pcb.c,v 1.121 2012/08/24 06:03:18 dholland Exp $ */ +/* $NetBSD: in6_pcb.c,v 1.122 2013/04/12 21:30:40 christos Exp $ */ /* $KAME: in6_pcb.c,v 1.84 2001/02/08 18:02:08 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_pcb.c,v 1.121 2012/08/24 06:03:18 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_pcb.c,v 1.122 2013/04/12 21:30:40 christos Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -452,6 +452,10 @@ in6_pcbconnect(void *v, struct mbuf *nam if (sin6->sin6_port == 0) return (EADDRNOTAVAIL); + if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr) && + in6p->in6p_socket->so_type == SOCK_STREAM) + return EADDRNOTAVAIL; + if (sin6->sin6_scope_id == 0 && !ip6_use_defzone) scope_ambiguous = 1; if ((error = sa6_embedscope(sin6, ip6_use_defzone)) != 0)