From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kara Subject: Re: [PATCH 4/4] fs: Fix possible use-after-free with AIO Date: Wed, 23 Jan 2013 20:18:58 +0100 Message-ID: <20130123191858.GA21112@quack.suse.cz> References: <1358945780-23661-1-git-send-email-jack@suse.cz> <1358945780-23661-5-git-send-email-jack@suse.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Jan Kara , linux-fsdevel@vger.kernel.org, tytso@mit.edu, bpm@sgi.com, jlbec@evilplan.org, Christoph Hellwig , Jens Axboe , stable@vger.kernel.org To: Jeff Moyer Return-path: Content-Disposition: inline In-Reply-To: Sender: stable-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Wed 23-01-13 10:02:09, Jeff Moyer wrote: > Jan Kara writes: > > > Running AIO is pinning inode in memory using file reference. Once AIO > > is completed using aio_complete(), file reference is put and inode can > > be freed from memory. So we have to be sure that calling aio_complete() > > is the last thing we do with the inode. > > > > CC: Christoph Hellwig > > CC: Jens Axboe > > CC: Jeff Moyer > > CC: stable@vger.kernel.org > > Signed-off-by: Jan Kara > > --- > > fs/direct-io.c | 2 +- > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > diff --git a/fs/direct-io.c b/fs/direct-io.c > > index cf5b44b..f853263 100644 > > --- a/fs/direct-io.c > > +++ b/fs/direct-io.c > > @@ -261,9 +261,9 @@ static ssize_t dio_complete(struct dio *dio, loff_t offset, ssize_t ret, bool is > > dio->end_io(dio->iocb, offset, transferred, > > dio->private, ret, is_async); > > } else { > > + inode_dio_done(dio->inode); > > if (is_async) > > aio_complete(dio->iocb, ret, 0); > > - inode_dio_done(dio->inode); > > } > > OK, so this is only a problem if nobody is waiting in inode_dio_wait, > yes? Good catch, though it seems incredibly unlikely anyone would trip > over this in practice (since fput is done in a worker thread, or > deferred). Yes, it's mostly a theoretical race. > Acked-by: Jeff Moyer Thanks. Honza -- Jan Kara SUSE Labs, CR