aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXu Kuohai <xukuohai@huawei.com>2023-08-04 03:37:37 -0400
committerMartin KaFai Lau <martin.lau@kernel.org>2023-08-09 20:29:02 -0700
commit7e96ec0e6605b69bb21bbf6c0ff9051e656ec2b1 (patch)
treeae21d2241e4c6551ca0041e433773283a13e7131
parent85c2c79a07302fe68a1ad5cc449458cc559e314d (diff)
downloadlinux-7e96ec0e6605b69bb21bbf6c0ff9051e656ec2b1.tar.gz
bpf, sockmap: Fix map type error in sock_map_del_link
sock_map_del_link() operates on both SOCKMAP and SOCKHASH, although both types have member named "progs", the offset of "progs" member in these two types is different, so "progs" should be accessed with the real map type. Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface") Signed-off-by: Xu Kuohai <xukuohai@huawei.com> Reviewed-by: John Fastabend <john.fastabend@gmail.com> Link: https://lore.kernel.org/r/20230804073740.194770-2-xukuohai@huaweicloud.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
-rw-r--r--net/core/sock_map.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/net/core/sock_map.c b/net/core/sock_map.c
index 08ab108206bf8e..8f07fea39d9ea4 100644
--- a/net/core/sock_map.c
+++ b/net/core/sock_map.c
@@ -146,13 +146,13 @@ static void sock_map_del_link(struct sock *sk,
list_for_each_entry_safe(link, tmp, &psock->link, list) {
if (link->link_raw == link_raw) {
struct bpf_map *map = link->map;
- struct bpf_stab *stab = container_of(map, struct bpf_stab,
- map);
- if (psock->saved_data_ready && stab->progs.stream_parser)
+ struct sk_psock_progs *progs = sock_map_progs(map);
+
+ if (psock->saved_data_ready && progs->stream_parser)
strp_stop = true;
- if (psock->saved_data_ready && stab->progs.stream_verdict)
+ if (psock->saved_data_ready && progs->stream_verdict)
verdict_stop = true;
- if (psock->saved_data_ready && stab->progs.skb_verdict)
+ if (psock->saved_data_ready && progs->skb_verdict)
verdict_stop = true;
list_del(&link->list);
sk_psock_free_link(link);