All of
 help / color / mirror / Atom feed
From: Eric Biggers <>
To: Jens Axboe <>
Cc: Linus Torvalds <>,
	Alexander Viro <>,
	Benjamin LaHaise <>,,
	linux-fsdevel <>,
	Linux Kernel Mailing List <>,
	Ramji Jiyani <>,
	Christoph Hellwig <>, Oleg Nesterov <>,
	Martijn Coenen <>,
	stable <>
Subject: Re: [PATCH v3 0/5] aio: fix use-after-free and missing wakeups
Date: Thu, 9 Dec 2021 21:10:07 -0800	[thread overview]
Message-ID: <YbLhL8y/TR5H0MLe@sol.localdomain> (raw)
In-Reply-To: <>

On Thu, Dec 09, 2021 at 02:46:45PM -0700, Jens Axboe wrote:
> On 12/9/21 11:00 AM, Linus Torvalds wrote:
> > On Wed, Dec 8, 2021 at 5:06 PM Eric Biggers <> wrote:
> >>
> >> Careful review is appreciated; the aio poll code is very hard to work
> >> with, and it doesn't appear to have many tests.  I've verified that it
> >> passes the libaio test suite, which provides some coverage of poll.
> >>
> >> Note, it looks like io_uring has the same bugs as aio poll.  I haven't
> >> tried to fix io_uring.
> > 
> > I'm hoping Jens is looking at the io_ring case, but I'm also assuming
> > that I'll just get a pull request for this at some point.
> Yes, when I saw this original posting I did discuss it with Pavel as
> well, and we agree that the same issue exists there. Which isn't too
> surprising, as that's where the io_uring poll code from originally.
> Eric, do you have a test case for this? aio is fine, we can convert it
> to io_uring as well. Would be nice for both verifying the fix, but also
> to carry in the io_uring regression tests for the future.

Well, the use-after-free bug is pretty hard to test for.  It only affects
polling a binder fd or signalfd, so one of those has to be used.  Also, I
haven't found a way to detect it other than the use-after-free itself, so
effectively a kernel with KASAN enabled is needed.  But KASAN doesn't work with
signalfd because the signalfd waitqueues are in an SLAB_TYPESAFE_BY_RCU slab, so
binder is the only way to detect it without working around SLAB_TYPESAFE_BY_RCU,
or patching the kernel to add log messages.  Also, aio supports inline
completion which avoids the bug, so that needs to be worked around.

So the best I can do is provide a program that's pretty specific to aio, which
causes KASAN to report a use-after-free if the kernel has CONFIG_KASAN and
CONFIG_ANDROID_BINDER_IPC enabled.  Note, "normal" Linux distros don't have
either option enabled.  I'm not sure that would be useful for you.

If you're also asking about the other bug (missed wakeups), i.e. the one that
patch 4 in this series fixes, in theory that would be detectable without those
dependencies.  It's still a race condition that depends on kernel implementation
details, so it will be hard to test for too.  But I might have a go at writing a
test for it anyway.

- Eric

  reply	other threads:[~2021-12-10  5:10 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-09  1:04 [PATCH v3 0/5] aio: fix use-after-free and missing wakeups Eric Biggers
2021-12-09  1:04 ` [PATCH v3 1/5] wait: add wake_up_pollfree() Eric Biggers
2021-12-09  1:04 ` [PATCH v3 2/5] binder: use wake_up_pollfree() Eric Biggers
2021-12-09  1:04 ` [PATCH v3 3/5] signalfd: " Eric Biggers
2021-12-09  1:04 ` [PATCH v3 4/5] aio: keep poll requests on waitqueue until completed Eric Biggers
2021-12-09  1:04 ` [PATCH v3 5/5] aio: fix use-after-free due to missing POLLFREE handling Eric Biggers
2021-12-09 18:00 ` [PATCH v3 0/5] aio: fix use-after-free and missing wakeups Linus Torvalds
2021-12-09 18:37   ` Eric Biggers
2021-12-13  7:23     ` Christoph Hellwig
2021-12-13 17:24       ` Eric Biggers
2021-12-09 21:46   ` Jens Axboe
2021-12-10  5:10     ` Eric Biggers [this message]
2021-12-10  8:07       ` Eric Biggers
2022-01-05 15:26     ` Eric Biggers
2022-01-05 16:11       ` Jens Axboe

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:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YbLhL8y/TR5H0MLe@sol.localdomain \ \ \ \ \ \ \ \ \ \ \ \ \ \

* 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.