From: Al Viro <viro@zeniv.linux.org.uk>
To: syzbot <syzbot+47dd250f527cb7bebf24@syzkaller.appspotmail.com>
Cc: arve@android.com, asml.silence@gmail.com, axboe@kernel.dk,
brauner@kernel.org, gregkh@linuxfoundation.org, hdanton@sina.com,
hridya@google.com, io-uring@vger.kernel.org,
joel@joelfernandes.org, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org, maco@android.com,
surenb@google.com, syzkaller-bugs@googlegroups.com,
tkjos@android.com
Subject: Re: [syzbot] KASAN: use-after-free Read in filp_close
Date: Sun, 5 Jun 2022 16:15:58 +0000 [thread overview]
Message-ID: <YpzWvkNcq0llgdkW@zeniv-ca.linux.org.uk> (raw)
In-Reply-To: <00000000000061dcef05e0b3d4e3@google.com>
On Sun, Jun 05, 2022 at 07:04:10AM -0700, syzbot wrote:
> syzbot has bisected this issue to:
>
> commit 6319194ec57b0452dcda4589d24c4e7db299c5bf
> Author: Al Viro <viro@zeniv.linux.org.uk>
> Date: Thu May 12 21:08:03 2022 +0000
>
> Unify the primitives for file descriptor closing
>
> bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=134cbe4ff00000
> start commit: 952923ddc011 Merge tag 'pull-18-rc1-work.namei' of git://g..
> git tree: upstream
> final oops: https://syzkaller.appspot.com/x/report.txt?x=10ccbe4ff00000
> console output: https://syzkaller.appspot.com/x/log.txt?x=174cbe4ff00000
> kernel config: https://syzkaller.appspot.com/x/.config?x=3096247591885bfa
> dashboard link: https://syzkaller.appspot.com/bug?extid=47dd250f527cb7bebf24
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=114f7bcdf00000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1659a94ff00000
>
> Reported-by: syzbot+47dd250f527cb7bebf24@syzkaller.appspotmail.com
> Fixes: 6319194ec57b ("Unify the primitives for file descriptor closing")
>
> For information about bisection process see: https://goo.gl/tpsmEJ#bisection
Argh... I see what's going on. Check if the following fixes the problem,
please.
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 27c9b004823a..73beea5dc18c 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -1857,6 +1857,8 @@ static void binder_deferred_fd_close(int fd)
init_task_work(&twcb->twork, binder_do_fd_close);
twcb->file = close_fd_get_file(fd);
if (twcb->file) {
+ // pin it until binder_do_fd_close(); see comments there
+ get_file(twcb->file);
filp_close(twcb->file, current->files);
task_work_add(current, &twcb->twork, TWA_RESUME);
} else {
diff --git a/fs/file.c b/fs/file.c
index dd6692048f4f..3bcc1ecc314a 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -800,8 +800,7 @@ struct file *__close_fd_get_file(unsigned int fd)
/*
* variant of close_fd that gets a ref on the file for later fput.
- * The caller must ensure that filp_close() called on the file, and then
- * an fput().
+ * The caller must ensure that filp_close() called on the file.
*/
struct file *close_fd_get_file(unsigned int fd)
{
diff --git a/fs/io_uring.c b/fs/io_uring.c
index 7257b0870353..33da5116cc38 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -5110,7 +5110,7 @@ static int io_close(struct io_kiocb *req, unsigned int issue_flags)
struct files_struct *files = current->files;
struct io_close *close = &req->close;
struct fdtable *fdt;
- struct file *file = NULL;
+ struct file *file;
int ret = -EBADF;
if (req->close.file_slot) {
@@ -5127,7 +5127,6 @@ static int io_close(struct io_kiocb *req, unsigned int issue_flags)
file = fdt->fd[close->fd];
if (!file || file->f_op == &io_uring_fops) {
spin_unlock(&files->file_lock);
- file = NULL;
goto err;
}
@@ -5147,8 +5146,6 @@ static int io_close(struct io_kiocb *req, unsigned int issue_flags)
err:
if (ret < 0)
req_set_fail(req);
- if (file)
- fput(file);
__io_req_complete(req, issue_flags, ret, 0);
return 0;
}
next prev parent reply other threads:[~2022-06-05 16:16 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-30 6:52 syzbot
2022-06-05 8:49 ` syzbot
2022-06-05 11:02 ` Al Viro
2022-06-05 14:04 ` syzbot
2022-06-05 16:15 ` Al Viro [this message]
2022-06-05 18:10 ` Al Viro
2022-06-05 18:29 ` syzbot
[not found] <20220605113753.5943-1-hdanton@sina.com>
2022-06-05 14:35 ` syzbot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YpzWvkNcq0llgdkW@zeniv-ca.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=arve@android.com \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hdanton@sina.com \
--cc=hridya@google.com \
--cc=io-uring@vger.kernel.org \
--cc=joel@joelfernandes.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maco@android.com \
--cc=surenb@google.com \
--cc=syzbot+47dd250f527cb7bebf24@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
--cc=tkjos@android.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®