diff options
Diffstat (limited to 'net/core/sock_map.c')
| -rw-r--r-- | net/core/sock_map.c | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/net/core/sock_map.c b/net/core/sock_map.c index 27d733c0f65e..8598466a3805 100644 --- a/net/core/sock_map.c +++ b/net/core/sock_map.c @@ -411,6 +411,9 @@ static int __sock_map_delete(struct bpf_stab *stab, struct sock *sk_test,  	struct sock *sk;  	int err = 0; +	if (irqs_disabled()) +		return -EOPNOTSUPP; /* locks here are hardirq-unsafe */ +  	spin_lock_bh(&stab->lock);  	sk = *psk;  	if (!sk_test || sk_test == sk) @@ -933,6 +936,9 @@ static long sock_hash_delete_elem(struct bpf_map *map, void *key)  	struct bpf_shtab_elem *elem;  	int ret = -ENOENT; +	if (irqs_disabled()) +		return -EOPNOTSUPP; /* locks here are hardirq-unsafe */ +  	hash = sock_hash_bucket_hash(key, key_size);  	bucket = sock_hash_select_bucket(htab, hash);  |