ipv6: fix net.ipv6.conf.all.accept_dad behaviour for real
Commit35e015e1f5("ipv6: fix net.ipv6.conf.all interface DAD handlers") was intended to affect accept_dad flag handling in such a way that DAD operation and mode on a given interface would be selected according to the maximum value of conf/{all,interface}/accept_dad. However, addrconf_dad_begin() checks for particular cases in which we need to skip DAD, and this check was modified in the wrong way. Namely, it was modified so that, if the accept_dad flag is 0 for the given interface *or* for all interfaces, DAD would be skipped. We have instead to skip DAD if accept_dad is 0 for the given interface *and* for all interfaces. Fixes:35e015e1f5("ipv6: fix net.ipv6.conf.all interface DAD handlers") Acked-by: Stefano Brivio <sbrivio@redhat.com> Signed-off-by: Matteo Croce <mcroce@redhat.com> Reported-by: Erik Kline <ek@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									6151b8b37b
								
							
						
					
					
						commit
						a2d3f3e338
					
				| @ -3820,8 +3820,8 @@ static void addrconf_dad_begin(struct inet6_ifaddr *ifp) | |||||||
| 		goto out; | 		goto out; | ||||||
| 
 | 
 | ||||||
| 	if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) || | 	if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) || | ||||||
| 	    dev_net(dev)->ipv6.devconf_all->accept_dad < 1 || | 	    (dev_net(dev)->ipv6.devconf_all->accept_dad < 1 && | ||||||
| 	    idev->cnf.accept_dad < 1 || | 	     idev->cnf.accept_dad < 1) || | ||||||
| 	    !(ifp->flags&IFA_F_TENTATIVE) || | 	    !(ifp->flags&IFA_F_TENTATIVE) || | ||||||
| 	    ifp->flags & IFA_F_NODAD) { | 	    ifp->flags & IFA_F_NODAD) { | ||||||
| 		bump_id = ifp->flags & IFA_F_TENTATIVE; | 		bump_id = ifp->flags & IFA_F_TENTATIVE; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user