summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Oskolkov2019-01-16 17:47:54 +0100
committerGreg Kroah-Hartman2019-02-27 10:08:57 +0100
commit8b92162f4e8b4d4d1a3ad43659e4bd09b3d0a7fb (patch)
tree8801526930d69d2dd561d5ffccbd4e0de1216394
parentleds: lp5523: fix a missing check of return value of lp55xx_read (diff)
downloadkernel-qcow2-linux-8b92162f4e8b4d4d1a3ad43659e4bd09b3d0a7fb.tar.gz
kernel-qcow2-linux-8b92162f4e8b4d4d1a3ad43659e4bd09b3d0a7fb.tar.xz
kernel-qcow2-linux-8b92162f4e8b4d4d1a3ad43659e4bd09b3d0a7fb.zip
bpf: bpf_setsockopt: reset sock dst on SO_MARK changes
[ Upstream commit f4924f24da8c7ef64195096817f3cde324091d97 ] 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(). Fixes: 8c4b4c7e9ff0 ("bpf: Add setsockopt helper function to bpf") Reported-by: Maciej Żenczykowski <maze@google.com> Signed-off-by: Peter Oskolkov <posk@google.com> Acked-by: Martin KaFai Lau <kafai@fb.com> Reviewed-by: Maciej Żenczykowski <maze@google.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--net/core/filter.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/core/filter.c b/net/core/filter.c
index 3400c7abda13..fb0080e84bd4 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -3930,7 +3930,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;