On Fri, Apr 25, 2025 at 11:41 AM Lizhi Xu <lizhi.xu@xxxxxxxxxxxxx> wrote: > > Some file systems do not support read_iter or write_iter, such as selinuxfs > in this issue. > So before calling them, first confirm that the interface is supported and > then call it. > > Reported-by: syzbot+6af973a3b8dfd2faefdc@xxxxxxxxxxxxxxxxxxxxxxxxx > Closes: https://syzkaller.appspot.com/bug?extid=6af973a3b8dfd2faefdc > Signed-off-by: Lizhi Xu <lizhi.xu@xxxxxxxxxxxxx> > --- > drivers/block/loop.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/drivers/block/loop.c b/drivers/block/loop.c > index 674527d770dc..4f968e3071ed 100644 > --- a/drivers/block/loop.c > +++ b/drivers/block/loop.c > @@ -449,10 +449,15 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd, > cmd->iocb.ki_flags = IOCB_DIRECT; > cmd->iocb.ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0); > > - if (rw == ITER_SOURCE) > - ret = file->f_op->write_iter(&cmd->iocb, &iter); > - else > - ret = file->f_op->read_iter(&cmd->iocb, &iter); > + ret = 0; > + if (rw == ITER_SOURCE) { > + if (likely(file->f_op->write_iter)) > + ret = file->f_op->write_iter(&cmd->iocb, &iter); > + } > + else { > + if (likely(file->f_op->read_iter)) > + ret = file->f_op->read_iter(&cmd->iocb, &iter); > + } The check can be added in loop_configure()/loop_change_fd() instead of fast IO path. Thanks,