UPSTREAM: ANDROID: fuse-bpf: Run bpf with migration disabled

To avoid a BUG_ON, we must disable migration before running any bpf
program.

Bug: 273620140
Test: fuse-test passes, no bug with CONFIG_DEBUG_ATOMIC_SLEEP
Change-Id: I9ed69ae93fc4b922782fccde293cb02b3eae3f06
Signed-off-by: Paul Lawrence <paullawrence@google.com>
(cherry picked from commit 0411f8d9dfa88e441456b5bcf684c5ec28ef08a7)
This commit is contained in:
Paul Lawrence 2023-03-30 13:47:33 -07:00 • committed by Alexander Martinz
commit 69bb0347bf
No known key found for this signature in database
GPG key ID: CF15BDD9A321A9B2

View file

@ -1830,6 +1830,16 @@ void __exit fuse_bpf_cleanup(void);
ssize_t fuse_bpf_simple_request(struct fuse_mount *fm, struct fuse_bpf_args *args);
static inline int fuse_bpf_run(struct bpf_prog *prog, struct fuse_bpf_args *fba)
{
int ret;
migrate_disable();
ret = BPF_PROG_RUN(prog, fba);
migrate_enable();
return ret;
}
/*
* expression statement to wrap the backing filter logic
* struct inode *inode: inode with bpf and backing inode
@ -1881,7 +1891,7 @@ ssize_t fuse_bpf_simple_request(struct fuse_mount *fm, struct fuse_bpf_args *arg
fa.out_numargs = fa.in_numargs; \
\
ext_flags = fuse_inode->bpf ? \
BPF_PROG_RUN(fuse_inode->bpf, &fa) : \
fuse_bpf_run(fuse_inode->bpf, &fa) : \
FUSE_BPF_BACKING; \
if (ext_flags < 0) { \
fer = (struct fuse_err_ret) { \
@ -1936,7 +1946,7 @@ ssize_t fuse_bpf_simple_request(struct fuse_mount *fm, struct fuse_bpf_args *arg
.size = fa.out_args[i].size, \
.value = fa.out_args[i].value, \
}; \
ext_flags = BPF_PROG_RUN(fuse_inode->bpf, &fa); \
ext_flags = fuse_bpf_run(fuse_inode->bpf, &fa); \
if (ext_flags < 0) { \
fer = (struct fuse_err_ret) { \
ERR_PTR(ext_flags), \