mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	udp: fix SO_BINDTODEVICE
Damir reported a breakage of SO_BINDTODEVICE for UDP sockets. In absence of VRF devices, after commitfb74c27735("net: ipv4: add second dif to udp socket lookups") the dif mismatch isn't fatal anymore for UDP socket lookup with non null sk_bound_dev_if, breaking SO_BINDTODEVICE semantics. This changeset addresses the issue making the dif match mandatory again in the above scenario. Reported-by: Damir Mansurov <dnman@oktetlabs.ru> Fixes:fb74c27735("net: ipv4: add second dif to udp socket lookups") Fixes:1801b570dd("net: ipv6: add second dif to udp socket lookups") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Acked-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									0e8411e426
								
							
						
					
					
						commit
						69678bcd4d
					
				
					 2 changed files with 4 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -401,9 +401,9 @@ static int compute_score(struct sock *sk, struct net *net,
 | 
			
		|||
		bool dev_match = (sk->sk_bound_dev_if == dif ||
 | 
			
		||||
				  sk->sk_bound_dev_if == sdif);
 | 
			
		||||
 | 
			
		||||
		if (exact_dif && !dev_match)
 | 
			
		||||
		if (!dev_match)
 | 
			
		||||
			return -1;
 | 
			
		||||
		if (sk->sk_bound_dev_if && dev_match)
 | 
			
		||||
		if (sk->sk_bound_dev_if)
 | 
			
		||||
			score += 4;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -148,9 +148,9 @@ static int compute_score(struct sock *sk, struct net *net,
 | 
			
		|||
		bool dev_match = (sk->sk_bound_dev_if == dif ||
 | 
			
		||||
				  sk->sk_bound_dev_if == sdif);
 | 
			
		||||
 | 
			
		||||
		if (exact_dif && !dev_match)
 | 
			
		||||
		if (!dev_match)
 | 
			
		||||
			return -1;
 | 
			
		||||
		if (sk->sk_bound_dev_if && dev_match)
 | 
			
		||||
		if (sk->sk_bound_dev_if)
 | 
			
		||||
			score++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue