Patchwork Fix commit 63d9950b08184e6531adceb65f64b429909cc101 (ipv6: Make v4-mapped bindings consistent with IPv4)

login
register
mail settings
Submitter Bruno Prémont
Date Aug. 21, 2009, 11:45 p.m.
Message ID <20090822014523.3ec2f591@neptune.home>
Download mbox | patch
Permalink /patch/31856/
State Accepted
Delegated to: David Miller
Headers show

Comments

Bruno Prémont - Aug. 21, 2009, 11:45 p.m.
Commit 63d9950b08184e6531adceb65f64b429909cc101
  (ipv6: Make v4-mapped bindings consistent with IPv4)
changes behavior of inet6_bind() for v4-mapped addresses so it should
behave the same way as inet_bind().

During this change setting of err to -EADDRNOTAVAIL got lost:

af_inet.c:469 inet_bind()
	err = -EADDRNOTAVAIL;
	if (!sysctl_ip_nonlocal_bind &&
	    !(inet->freebind || inet->transparent) &&
	    addr->sin_addr.s_addr != htonl(INADDR_ANY) &&
	    chk_addr_ret != RTN_LOCAL &&
	    chk_addr_ret != RTN_MULTICAST &&
	    chk_addr_ret != RTN_BROADCAST)
		goto out;


af_inet6.c:463 inet6_bind()
	if (addr_type == IPV6_ADDR_MAPPED) {
		int chk_addr_ret;

		/* Binding to v4-mapped address on a v6-only socket                         
		 * makes no sense                                                           
		 */
		if (np->ipv6only) {
			err = -EINVAL;
			goto out; 
		}

		/* Reproduce AF_INET checks to make the bindings consitant */               
		v4addr = addr->sin6_addr.s6_addr32[3];                                      
		chk_addr_ret = inet_addr_type(net, v4addr);                                 
		if (!sysctl_ip_nonlocal_bind &&                                             
		    !(inet->freebind || inet->transparent) &&                               
		    v4addr != htonl(INADDR_ANY) &&
		    chk_addr_ret != RTN_LOCAL &&                                            
		    chk_addr_ret != RTN_MULTICAST &&                                        
		    chk_addr_ret != RTN_BROADCAST)
			goto out;
	} else {


Signed-off-by Bruno Prémont <bonbons@linux-vserver.org>
---

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Aug. 24, 2009, 2:07 a.m.
From: Bruno Prémont <bonbons@linux-vserver.org>
Date: Sat, 22 Aug 2009 01:45:23 +0200

> Commit 63d9950b08184e6531adceb65f64b429909cc101
>   (ipv6: Make v4-mapped bindings consistent with IPv4)
> changes behavior of inet6_bind() for v4-mapped addresses so it should
> behave the same way as inet_bind().
> 
> During this change setting of err to -EADDRNOTAVAIL got lost:
 ...
> Signed-off-by Bruno Prémont <bonbons@linux-vserver.org>

Thanks for finding and fixing this bug, applied, thanks!
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bruno Prémont - Aug. 25, 2009, 8:20 p.m.
On Sun, 23 August 2009 David Miller <davem@davemloft.net> wrote:
> From: Bruno Prémont <bonbons@linux-vserver.org>
> Date: Sat, 22 Aug 2009 01:45:23 +0200
> 
> > Commit 63d9950b08184e6531adceb65f64b429909cc101
> >   (ipv6: Make v4-mapped bindings consistent with IPv4)
> > changes behavior of inet6_bind() for v4-mapped addresses so it
> > should behave the same way as inet_bind().
> > 
> > During this change setting of err to -EADDRNOTAVAIL got lost:
>  ...
> > Signed-off-by Bruno Prémont <bonbons@linux-vserver.org>
> 
> Thanks for finding and fixing this bug, applied, thanks!

Please consider queueing this for 2.6.30.x stable, upstream commit is
ca6982b858e1d08010c1d29d8e8255b2ac2ad70a

Bruno
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Greg KH - Sept. 3, 2009, 10:25 p.m.
On Tue, Aug 25, 2009 at 10:20:42PM +0200, Bruno Prémont wrote:
> On Sun, 23 August 2009 David Miller <davem@davemloft.net> wrote:
> > From: Bruno Prémont <bonbons@linux-vserver.org>
> > Date: Sat, 22 Aug 2009 01:45:23 +0200
> > 
> > > Commit 63d9950b08184e6531adceb65f64b429909cc101
> > >   (ipv6: Make v4-mapped bindings consistent with IPv4)
> > > changes behavior of inet6_bind() for v4-mapped addresses so it
> > > should behave the same way as inet_bind().
> > > 
> > > During this change setting of err to -EADDRNOTAVAIL got lost:
> >  ...
> > > Signed-off-by Bruno Prémont <bonbons@linux-vserver.org>
> > 
> > Thanks for finding and fixing this bug, applied, thanks!
> 
> Please consider queueing this for 2.6.30.x stable, upstream commit is
> ca6982b858e1d08010c1d29d8e8255b2ac2ad70a

Now queued up.

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index caa0278..45f9a2a 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -306,8 +306,10 @@  int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 		    v4addr != htonl(INADDR_ANY) &&
 		    chk_addr_ret != RTN_LOCAL &&
 		    chk_addr_ret != RTN_MULTICAST &&
-		    chk_addr_ret != RTN_BROADCAST)
+		    chk_addr_ret != RTN_BROADCAST) {
+			err = -EADDRNOTAVAIL;
 			goto out;
+		}
 	} else {
 		if (addr_type != IPV6_ADDR_ANY) {
 			struct net_device *dev = NULL;