bpf: Change inode_storage's lookup_elem return value from NULL to -EBADF.
PATCH 1/1 bpf: Change inode_storage's lookup_elem return value from NULL to -EBADF.
bpf_fd_inode_storage_lookup_elem returned NULL when getting a bad FD which caused -ENOENT in bpf_map_copy_value. EBADF is better than ENOENT for a bad FD behaviour.
The patch was partially contributed by CyberArk Software, Inc.
--- kernel/bpf/bpf_inode_storage.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/bpf/bpf_inode_storage.c +1 -1
@@ -109,7 +109,7 @@ static void *bpf_fd_inode_storage_lookup_elem(struct bpf_map *map, void *key) fd = *(int *)key; f =fget_raw (fd);if (!f) -return NULL ; +return -EBADF ; sdata =inode_storage_lookup (f->f_inode, map, true);fput (f);
Signature · 1 line
2.27.0
kernel test robot
build botThank you for the patch! Perhaps something to improve:
Hi Tal,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on bpf-next/master]
url: https://github.com/0day-ci/linux/commits/Tal-Lossos/bpf-Change-inode_storage-s-lookup_elem-return-value-from-NULL-to-EBADF/20210307-183448 base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master config: powerpc-allyesconfig (attached as .config) compiler: powerpc64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/62784457408977140aecb9d1cadbb13e281e7932
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Tal-Lossos/bpf-Change-inode_storage-s-lookup_elem-return-value-from-NULL-to-EBADF/20210307-183448 git checkout 62784457408977140aecb9d1cadbb13e281e7932
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc
If you fix the issue, kindly add following tag as appropriate
All warnings (new ones prefixed by >>):
kernel/bpf/bpf_inode_storage.c: In function 'bpf_fd_inode_storage_lookup_elem':
>> kernel/bpf/bpf_inode_storage.c:112:10: warning: returning 'int' from a function with return type 'void *' makes pointer from integer without a cast [-Wint-conversion]
112 | return -EBADF;
| ^vim +112 kernel/bpf/bpf_inode_storage.c
102
103 static void *bpf_fd_inode_storage_lookup_elem(struct bpf_map *map, void *key)
104 {
105 struct bpf_local_storage_data *sdata;
106 struct file *f;
107 int fd;
108
109 fd = *(int *)key;
110 f = fget_raw(fd);
111 if (!f)
> 112 return -EBADF;
113
114 sdata = inode_storage_lookup(f->f_inode, map, true);
115 fput(f);
116 return sdata ? sdata->data : NULL;
117 }
118
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org