• Home
  • Raw
  • Download

Lines Matching +full:path +full:- +full:map

1 // SPDX-License-Identifier: GPL-2.0-only
92 return ERR_PTR(-EINVAL); in bpf_fd_probe_obj()
113 return ERR_PTR(-EINVAL); in bpf_get_inode()
118 return ERR_PTR(-ENOSPC); in bpf_get_inode()
120 inode->i_ino = get_next_ino(); in bpf_get_inode()
121 inode->i_atime = inode_set_ctime_current(inode); in bpf_get_inode()
122 inode->i_mtime = inode->i_atime; in bpf_get_inode()
132 if (inode->i_op == &bpf_prog_iops) in bpf_inode_type()
134 else if (inode->i_op == &bpf_map_iops) in bpf_inode_type()
136 else if (inode->i_op == &bpf_link_iops) in bpf_inode_type()
139 return -EACCES; in bpf_inode_type()
150 dir->i_mtime = inode_set_ctime_current(dir); in bpf_dentry_finalize()
158 inode = bpf_get_inode(dir->i_sb, dir, mode | S_IFDIR); in bpf_mkdir()
162 inode->i_op = &bpf_dir_iops; in bpf_mkdir()
163 inode->i_fop = &simple_dir_operations; in bpf_mkdir()
179 return m->private; in map_iter()
184 return file_inode(m->file)->i_private; in seq_file_to_map()
190 kfree(iter->key); in map_iter_free()
195 static struct map_iter *map_iter_alloc(struct bpf_map *map) in map_iter_alloc() argument
203 iter->key = kzalloc(map->key_size, GFP_KERNEL | __GFP_NOWARN); in map_iter_alloc()
204 if (!iter->key) in map_iter_alloc()
216 struct bpf_map *map = seq_file_to_map(m); in map_seq_next() local
217 void *key = map_iter(m)->key; in map_seq_next()
221 if (map_iter(m)->done) in map_seq_next()
230 if (map->ops->map_get_next_key(map, prev_key, key)) { in map_seq_next()
231 map_iter(m)->done = true; in map_seq_next()
240 if (map_iter(m)->done) in map_seq_start()
243 return *pos ? map_iter(m)->key : SEQ_START_TOKEN; in map_seq_start()
252 struct bpf_map *map = seq_file_to_map(m); in map_seq_show() local
253 void *key = map_iter(m)->key; in map_seq_show()
259 map->ops->map_seq_show_elem(map, key, m); in map_seq_show()
274 struct bpf_map *map = inode->i_private; in bpffs_map_open() local
279 iter = map_iter_alloc(map); in bpffs_map_open()
281 return -ENOMEM; in bpffs_map_open()
289 m = file->private_data; in bpffs_map_open()
290 m->private = iter; in bpffs_map_open()
297 struct seq_file *m = file->private_data; in bpffs_map_release()
305 * read operation for a BPF map. The purpose is to
307 * "cat bpffs/pathto/a-pinned-map".
311 * BPF_OBJ_GET_INFO_BY_FD and the map's lookup/update
322 return -EIO; in bpffs_obj_open()
333 struct inode *dir = dentry->d_parent->d_inode; in bpf_mkobj_ops()
334 struct inode *inode = bpf_get_inode(dir->i_sb, dir, mode); in bpf_mkobj_ops()
338 inode->i_op = iops; in bpf_mkobj_ops()
339 inode->i_fop = fops; in bpf_mkobj_ops()
340 inode->i_private = raw; in bpf_mkobj_ops()
354 struct bpf_map *map = arg; in bpf_mkmap() local
357 bpf_map_support_seq_show(map) ? in bpf_mkmap()
376 if ((dir->i_mode & S_IALLUGO) && in bpf_lookup()
377 strchr(dentry->d_name.name, '.')) in bpf_lookup()
378 return ERR_PTR(-EPERM); in bpf_lookup()
390 return -ENOMEM; in bpf_symlink()
392 inode = bpf_get_inode(dir->i_sb, dir, S_IRWXUGO | S_IFLNK); in bpf_symlink()
398 inode->i_op = &simple_symlink_inode_operations; in bpf_symlink()
399 inode->i_link = link; in bpf_symlink()
423 inode_lock(parent->d_inode); in bpf_iter_link_pin_kernel()
426 inode_unlock(parent->d_inode); in bpf_iter_link_pin_kernel()
432 inode_unlock(parent->d_inode); in bpf_iter_link_pin_kernel()
441 struct path path; in bpf_obj_do_pin() local
445 dentry = user_path_create(path_fd, pathname, &path, 0); in bpf_obj_do_pin()
449 dir = d_inode(path.dentry); in bpf_obj_do_pin()
450 if (dir->i_op != &bpf_dir_iops) { in bpf_obj_do_pin()
451 ret = -EPERM; in bpf_obj_do_pin()
456 ret = security_path_mknod(&path, dentry, mode, 0); in bpf_obj_do_pin()
471 ret = -EPERM; in bpf_obj_do_pin()
474 done_path_create(&path, dentry); in bpf_obj_do_pin()
499 struct path path; in bpf_obj_do_get() local
503 ret = user_path_at(path_fd, pathname, LOOKUP_FOLLOW, &path); in bpf_obj_do_get()
507 inode = d_backing_inode(path.dentry); in bpf_obj_do_get()
508 ret = path_permission(&path, ACC_MODE(flags)); in bpf_obj_do_get()
516 raw = bpf_any_get(inode->i_private, *type); in bpf_obj_do_get()
518 touch_atime(&path); in bpf_obj_do_get()
520 path_put(&path); in bpf_obj_do_get()
523 path_put(&path); in bpf_obj_do_get()
547 ret = (f_flags != O_RDWR) ? -EINVAL : bpf_link_new_fd(raw); in bpf_obj_get_user()
549 return -ENOENT; in bpf_obj_get_user()
563 if (inode->i_op == &bpf_map_iops) in __get_prog_inode()
564 return ERR_PTR(-EINVAL); in __get_prog_inode()
565 if (inode->i_op == &bpf_link_iops) in __get_prog_inode()
566 return ERR_PTR(-EINVAL); in __get_prog_inode()
567 if (inode->i_op != &bpf_prog_iops) in __get_prog_inode()
568 return ERR_PTR(-EACCES); in __get_prog_inode()
570 prog = inode->i_private; in __get_prog_inode()
577 return ERR_PTR(-EINVAL); in __get_prog_inode()
586 struct path path; in bpf_prog_get_type_path() local
587 int ret = kern_path(name, LOOKUP_FOLLOW, &path); in bpf_prog_get_type_path()
590 prog = __get_prog_inode(d_backing_inode(path.dentry), type); in bpf_prog_get_type_path()
592 touch_atime(&path); in bpf_prog_get_type_path()
593 path_put(&path); in bpf_prog_get_type_path()
603 umode_t mode = d_inode(root)->i_mode & S_IALLUGO & ~S_ISVTX; in bpf_show_options()
614 if (S_ISLNK(inode->i_mode)) in bpf_free_inode()
615 kfree(inode->i_link); in bpf_free_inode()
617 bpf_any_put(inode->i_private, type); in bpf_free_inode()
643 struct bpf_mount_opts *opts = fc->fs_private; in bpf_parse_param()
651 * better continue to ignore non-existing options for bpf. in bpf_parse_param()
653 if (opt == -ENOPARAM) { in bpf_parse_param()
655 if (opt != -ENOPARAM) in bpf_parse_param()
667 opts->mode = result.uint_32 & S_IALLUGO; in bpf_parse_param()
691 if (!try_module_get(bpf_preload_ops->owner)) { in bpf_preload_mod_get()
702 module_put(bpf_preload_ops->owner); in bpf_preload_mod_put()
721 err = bpf_preload_ops->preload(objs); in populate_bpffs()
743 struct bpf_mount_opts *opts = fc->fs_private; in bpf_fill_super()
751 sb->s_op = &bpf_super_ops; in bpf_fill_super()
753 inode = sb->s_root->d_inode; in bpf_fill_super()
754 inode->i_op = &bpf_dir_iops; in bpf_fill_super()
755 inode->i_mode &= ~S_IALLUGO; in bpf_fill_super()
756 populate_bpffs(sb->s_root); in bpf_fill_super()
757 inode->i_mode |= S_ISVTX | opts->mode; in bpf_fill_super()
768 kfree(fc->fs_private); in bpf_free_fc()
786 return -ENOMEM; in bpf_init_fs_context()
788 opts->mode = S_IRWXUGO; in bpf_init_fs_context()
790 fc->fs_private = opts; in bpf_init_fs_context()
791 fc->ops = &bpf_context_ops; in bpf_init_fs_context()