diff options
| author | David S. Miller <davem@davemloft.net> | 2020-01-19 22:10:04 +0100 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2020-01-19 22:10:04 +0100 |
| commit | b3f7e3f23a763ccaae7b52d88d2c91e66c80d406 (patch) | |
| tree | e00e90eb161305ed9895315ba12e30ac17de9523 /net/core/sock_map.c | |
| parent | 4ee9e6e027c06eb1dd1cdbe025d461e407ece755 (diff) | |
| parent | 7008ee121089b8193aea918b98850fe87d996508 (diff) | |
Merge ra.kernel.org:/pub/scm/linux/kernel/git/netdev/net
Diffstat (limited to 'net/core/sock_map.c')
| -rw-r--r-- | net/core/sock_map.c | 7 |
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); } |