123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause WITH Linux-syscall-note */
- /* Copyright (c) 2022 Google LLC */
- #ifndef _LINUX_ANDROID_FUSE_H
- #define _LINUX_ANDROID_FUSE_H
- #ifdef __KERNEL__
- #include <linux/types.h>
- #else
- #include <stdint.h>
- #endif
- #define FUSE_ACTION_KEEP 0
- #define FUSE_ACTION_REMOVE 1
- #define FUSE_ACTION_REPLACE 2
- struct fuse_entry_bpf_out {
- uint64_t backing_action;
- uint64_t backing_fd;
- uint64_t bpf_action;
- uint64_t bpf_fd;
- };
- struct fuse_entry_bpf {
- struct fuse_entry_bpf_out out;
- struct file *backing_file;
- struct file *bpf_file;
- };
- struct fuse_read_out {
- uint64_t offset;
- uint32_t again;
- uint32_t padding;
- };
- struct fuse_in_postfilter_header {
- uint32_t len;
- uint32_t opcode;
- uint64_t unique;
- uint64_t nodeid;
- uint32_t uid;
- uint32_t gid;
- uint32_t pid;
- uint32_t error_in;
- };
- /*
- * Fuse BPF Args
- *
- * Used to communicate with bpf programs to allow checking or altering certain values.
- * The end_offset allows the bpf verifier to check boundaries statically. This reflects
- * the ends of the buffer. size shows the length that was actually used.
- *
- */
- /** One input argument of a request */
- struct fuse_bpf_in_arg {
- uint32_t size;
- uint32_t padding;
- union {
- const void *value;
- uint64_t padding2;
- };
- union {
- const void *end_offset;
- uint64_t padding3;
- };
- };
- /** One output argument of a request */
- struct fuse_bpf_arg {
- uint32_t size;
- uint32_t padding;
- union {
- void *value;
- uint64_t padding2;
- };
- union {
- void *end_offset;
- uint64_t padding3;
- };
- };
- #define FUSE_MAX_IN_ARGS 5
- #define FUSE_MAX_OUT_ARGS 3
- #define FUSE_BPF_FORCE (1 << 0)
- #define FUSE_BPF_OUT_ARGVAR (1 << 6)
- struct fuse_bpf_args {
- uint64_t nodeid;
- uint32_t opcode;
- uint32_t error_in;
- uint32_t in_numargs;
- uint32_t out_numargs;
- uint32_t flags;
- uint32_t padding;
- struct fuse_bpf_in_arg in_args[FUSE_MAX_IN_ARGS];
- struct fuse_bpf_arg out_args[FUSE_MAX_OUT_ARGS];
- };
- #define FUSE_BPF_USER_FILTER 1
- #define FUSE_BPF_BACKING 2
- #define FUSE_BPF_POST_FILTER 4
- #define FUSE_OPCODE_FILTER 0x0ffff
- #define FUSE_PREFILTER 0x10000
- #define FUSE_POSTFILTER 0x20000
- struct bpf_prog *fuse_get_bpf_prog(struct file *file);
- #endif /* _LINUX_ANDROID_FUSE_H */
|