On Jan 27, 2025 Hamza Mahfooz <hamzamahfooz@xxxxxxxxxxxxxxxxxxx> wrote: > > Have io_uring_allowed() return an error code directly instead of > true/false. This is needed for follow-up work to guard io_uring_setup() > with LSM. > > Cc: Jens Axboe <axboe@xxxxxxxxx> > Signed-off-by: Hamza Mahfooz <hamzamahfooz@xxxxxxxxxxxxxxxxxxx> > --- > io_uring/io_uring.c | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c > index 7bfbc7c22367..c2d8bd4c2cfc 100644 > --- a/io_uring/io_uring.c > +++ b/io_uring/io_uring.c > @@ -3789,29 +3789,36 @@ static long io_uring_setup(u32 entries, struct io_uring_params __user *params) > return io_uring_create(entries, &p, params); > } > > -static inline bool io_uring_allowed(void) > +static inline int io_uring_allowed(void) > { > int disabled = READ_ONCE(sysctl_io_uring_disabled); > kgid_t io_uring_group; > > if (disabled == 2) > - return false; > + return -EPERM; > > if (disabled == 0 || capable(CAP_SYS_ADMIN)) > - return true; > + goto allowed_lsm; I'd probably just 'return 0;' here as the "allowed_lsm" goto label doesn't make a lot of sense until patch 2/2, but otherwise this looks okay to me. Jens, are you okay with this patch? If yes, can we get an ACK from you? > io_uring_group = make_kgid(&init_user_ns, sysctl_io_uring_group); > if (!gid_valid(io_uring_group)) > - return false; > + return -EPERM; > + > + if (!in_group_p(io_uring_group)) > + return -EPERM; > > - return in_group_p(io_uring_group); > +allowed_lsm: > + return 0; > } > > SYSCALL_DEFINE2(io_uring_setup, u32, entries, > struct io_uring_params __user *, params) > { > - if (!io_uring_allowed()) > - return -EPERM; > + int ret; > + > + ret = io_uring_allowed(); > + if (ret) > + return ret; > > return io_uring_setup(entries, params); > } > -- > 2.47.1 -- paul-moore.com