[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190116164754.104170-1-posk@google.com>
Date: Wed, 16 Jan 2019 08:47:54 -0800
From: Peter Oskolkov <posk@...gle.com>
To: Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>, netdev@...r.kernel.org
Cc: Peter Oskolkov <posk.devel@...il.com>,
Peter Oskolkov <posk@...gle.com>,
"Maciej Żenczykowski" <maze@...gle.com>
Subject: [PATCH bpf-next] bpf: bpf_setsockopt: reset sock dst on SO_MARK changes
In sock_setsockopt() (net/core/sock.h), when SO_MARK option is used
to change sk_mark, sk_dst_reset(sk) is called. The same should be done
in bpf_setsockopt.
Reported-by: Maciej Żenczykowski <maze@...gle.com>
Signed-off-by: Peter Oskolkov <posk@...gle.com>
---
net/core/filter.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/net/core/filter.c b/net/core/filter.c
index 2b3b436ef545..0c1bc6ccfd7f 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -4132,7 +4132,10 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock,
sk->sk_rcvlowat = val ? : 1;
break;
case SO_MARK:
- sk->sk_mark = val;
+ if (sk->sk_mark != val) {
+ sk->sk_mark = val;
+ sk_dst_reset(sk);
+ }
break;
default:
ret = -EINVAL;
--
Powered by blists - more mailing lists