mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	sock: Reset dst when changing sk_mark via setsockopt
When setting the SO_MARK socket option, if the mark changes, the dst needs to be reset so that a new route lookup is performed. This fixes the case where an application wants to change routing by setting a new sk_mark. If this is done after some packets have already been sent, the dst is cached and has no effect. Signed-off-by: David Barmann <david.barmann@stackpath.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									52358cb5a3
								
							
						
					
					
						commit
						50254256f3
					
				
					 1 changed files with 4 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -952,10 +952,12 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
 | 
			
		|||
			clear_bit(SOCK_PASSSEC, &sock->flags);
 | 
			
		||||
		break;
 | 
			
		||||
	case SO_MARK:
 | 
			
		||||
		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
 | 
			
		||||
		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
 | 
			
		||||
			ret = -EPERM;
 | 
			
		||||
		else
 | 
			
		||||
		} else if (val != sk->sk_mark) {
 | 
			
		||||
			sk->sk_mark = val;
 | 
			
		||||
			sk_dst_reset(sk);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case SO_RXQ_OVFL:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue