diff options
Diffstat (limited to 'kernel/bpf/bpf_inode_storage.c')
| -rw-r--r-- | kernel/bpf/bpf_inode_storage.c | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/kernel/bpf/bpf_inode_storage.c b/kernel/bpf/bpf_inode_storage.c index 96ceed0e0fb5..e29d9e3d853e 100644 --- a/kernel/bpf/bpf_inode_storage.c +++ b/kernel/bpf/bpf_inode_storage.c @@ -17,6 +17,7 @@  #include <linux/bpf_lsm.h>  #include <linux/btf_ids.h>  #include <linux/fdtable.h> +#include <linux/rcupdate_trace.h>  DEFINE_BPF_STORAGE_CACHE(inode_cache); @@ -44,7 +45,8 @@ static struct bpf_local_storage_data *inode_storage_lookup(struct inode *inode,  	if (!bsb)  		return NULL; -	inode_storage = rcu_dereference(bsb->storage); +	inode_storage = +		rcu_dereference_check(bsb->storage, bpf_rcu_lock_held());  	if (!inode_storage)  		return NULL; @@ -172,6 +174,7 @@ BPF_CALL_4(bpf_inode_storage_get, struct bpf_map *, map, struct inode *, inode,  {  	struct bpf_local_storage_data *sdata; +	WARN_ON_ONCE(!bpf_rcu_lock_held());  	if (flags & ~(BPF_LOCAL_STORAGE_GET_F_CREATE))  		return (unsigned long)NULL; @@ -204,6 +207,7 @@ BPF_CALL_4(bpf_inode_storage_get, struct bpf_map *, map, struct inode *, inode,  BPF_CALL_2(bpf_inode_storage_delete,  	   struct bpf_map *, map, struct inode *, inode)  { +	WARN_ON_ONCE(!bpf_rcu_lock_held());  	if (!inode)  		return -EINVAL; |