Skip to contentSkip to conversation

bpf: Change inode_storage's lookup_elem return value from NULL to -EBADF.

PATCH Superseded Tal Lossos 2 participants 2 messages Mar 7, 2021 BPF

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Tal Lossos

author
#0 lore raw

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
index da753721457c..0ca25e9549d8 100644
@@ -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
#1 lore raw
Thank 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