summaryrefslogtreecommitdiffstats
path: root/net/core/sock_map.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2020-01-20 08:42:47 +0100
committerIngo Molnar <mingo@kernel.org>2020-01-20 08:42:47 +0100
commit837171fe77d700222bb75ef5fe26f4785fcd9e99 (patch)
tree3d73dc7328db9636f0ac0e11961ec031647ed39d /net/core/sock_map.c
parentc29a59e43829beabc4c26036ebcc6a32dd0b6a01 (diff)
parentdef9d2780727cec3313ed3522d0123158d87224d (diff)
downloadlinux-837171fe77d700222bb75ef5fe26f4785fcd9e99.tar.gz
linux-837171fe77d700222bb75ef5fe26f4785fcd9e99.tar.bz2
linux-837171fe77d700222bb75ef5fe26f4785fcd9e99.zip
Merge tag 'v5.5-rc7' into locking/kcsan, to refresh the tree
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'net/core/sock_map.c')
-rw-r--r--net/core/sock_map.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/core/sock_map.c b/net/core/sock_map.c
index eb114ee419b6..8998e356f423 100644
--- a/net/core/sock_map.c
+++ b/net/core/sock_map.c
@@ -241,8 +241,11 @@ static void sock_map_free(struct bpf_map *map)
struct sock *sk;
sk = xchg(psk, NULL);
- if (sk)
+ if (sk) {
+ lock_sock(sk);
sock_map_unref(sk, psk);
+ release_sock(sk);
+ }
}
raw_spin_unlock_bh(&stab->lock);
rcu_read_unlock();
@@ -862,7 +865,9 @@ static void sock_hash_free(struct bpf_map *map)
raw_spin_lock_bh(&bucket->lock);
hlist_for_each_entry_safe(elem, node, &bucket->head, node) {
hlist_del_rcu(&elem->node);
+ lock_sock(elem->sk);
sock_map_unref(elem->sk, elem);
+ release_sock(elem->sk);
}
raw_spin_unlock_bh(&bucket->lock);
}