diff options
author | Peter Oskolkov <posk@google.com> | 2019-01-16 11:47:54 -0500 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2019-01-17 18:27:47 -0500 |
commit | f4924f24da8c7ef64195096817f3cde324091d97 (patch) | |
tree | c59e9d734170a6ff9c5640a9ada341bdf77ec515 /net | |
parent | c61c27687a5abce11431e6de1adb6e36099b9859 (diff) |
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().
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/filter.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index d9076e609fca..d9ea51b47f35 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, | |||
4132 | sk->sk_rcvlowat = val ? : 1; | 4132 | sk->sk_rcvlowat = val ? : 1; |
4133 | break; | 4133 | break; |
4134 | case SO_MARK: | 4134 | case SO_MARK: |
4135 | sk->sk_mark = val; | 4135 | if (sk->sk_mark != val) { |
4136 | sk->sk_mark = val; | ||
4137 | sk_dst_reset(sk); | ||
4138 | } | ||
4136 | break; | 4139 | break; |
4137 | default: | 4140 | default: |
4138 | ret = -EINVAL; | 4141 | ret = -EINVAL; |