diff options
author | Viet Hoang Tran <hoang.tran@uclouvain.be> | 2019-04-15 09:54:55 +0000 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-04-16 19:24:20 -0700 |
commit | 725721a6506eea53bfde81a34e91a06d6162c216 (patch) | |
tree | de84ddb9807311eae13b1fe9cf1c6da32eed66c6 /net | |
parent | 809041e765055ba311f3a0b8751db1c65739ad51 (diff) | |
download | lwn-725721a6506eea53bfde81a34e91a06d6162c216.tar.gz lwn-725721a6506eea53bfde81a34e91a06d6162c216.zip |
bpf: allow clearing all sock_ops callback flags
The helper function bpf_sock_ops_cb_flags_set() can be used to both
set and clear the sock_ops callback flags. However, its current
behavior is not consistent. BPF program may clear a flag if more than
one were set, or replace a flag with another one, but cannot clear all
flags.
This patch also updates the documentation to clarify the ability to
clear flags of this helper function.
Signed-off-by: Hoang Tran <hoang.tran@uclouvain.be>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/filter.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index bd1f51907b83..1833926a63fc 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4437,8 +4437,7 @@ BPF_CALL_2(bpf_sock_ops_cb_flags_set, struct bpf_sock_ops_kern *, bpf_sock, if (!IS_ENABLED(CONFIG_INET) || !sk_fullsock(sk)) return -EINVAL; - if (val) - tcp_sk(sk)->bpf_sock_ops_cb_flags = val; + tcp_sk(sk)->bpf_sock_ops_cb_flags = val; return argval & (~BPF_SOCK_OPS_ALL_CB_FLAGS); } |