forked from luck/tmp_suning_uos_patched
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
|
@ -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 New Issue
Block a user