From 0c42f7b9c43572306eb20838b1920f6f975359d4 Mon Sep 17 00:00:00 2001 From: Artur Bergman Date: Mon, 20 Apr 2015 23:11:35 +0000 Subject: [PATCH] When you SO_MARK a socket to get it to use a different routing table, it doesn't currently reset the dst so until something else triggers that dst reset the new routing table is not used for the connection, this will force a route lookup next time you try to send something --- net/core/sock.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/core/sock.c b/net/core/sock.c index af65d17517b8e5..f36f123b10ae39 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -918,8 +918,10 @@ int sock_setsockopt(struct socket *sock, int level, int optname, case SO_MARK: if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) ret = -EPERM; - else + else { sk->sk_mark = val; + sk_dst_reset(sk); + } break; /* We implement the SO_SNDLOWAT etc to