From: Sahitya Tummala <stummala@codeaurora.org>
To: Andreas Dilger <adilger@dilger.ca>
Cc: Theodore Ts'o <tytso@mit.edu>,
linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] ext4: fix use-after-free in dx_release()
Date: Wed, 8 May 2019 13:59:26 +0530 [thread overview]
Message-ID: <20190508082926.GC19198@codeaurora.org> (raw)
In-Reply-To: <9EA5FF19-6602-46AC-AD1A-A2E5B7209040@dilger.ca>
On Wed, May 08, 2019 at 01:09:47AM -0600, Andreas Dilger wrote:
> On May 8, 2019, at 12:13 AM, Sahitya Tummala <stummala@codeaurora.org> wrote:
> >
> > The buffer_head (frames[0].bh) and it's corresping page can be
> > potentially free'd once brelse() is done inside the for loop
> > but before the for loop exits in dx_release(). It can be free'd
> > in another context, when the page cache is flushed via
> > drop_caches_sysctl_handler(). This results into below data abort
> > when accessing info->indirect_levels in dx_release().
> >
> > Unable to handle kernel paging request at virtual address ffffffc17ac3e01e
> > Call trace:
> > dx_release+0x70/0x90
> > ext4_htree_fill_tree+0x2d4/0x300
> > ext4_readdir+0x244/0x6f8
> > iterate_dir+0xbc/0x160
> > SyS_getdents64+0x94/0x174
> >
> > Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
>
> The patch looks reasonable, but there is a danger that it may be
> "optimized" back to the pre-patch form again. It probably makes
> sense to include a comment like:
>
> /* save local copy, "info" may be freed after brelse() */
Thanks for reviewing it. Sure, I will add the comment.
>
> Looks fine otherwise.
>
> Reviewed-by: Andreas Dilger <adilger@dilger.ca>
>
> > ---
> > fs/ext4/namei.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
> > index 4181c9c..7e6c298 100644
> > --- a/fs/ext4/namei.c
> > +++ b/fs/ext4/namei.c
> > @@ -871,12 +871,14 @@ static void dx_release(struct dx_frame *frames)
> > {
> > struct dx_root_info *info;
> > int i;
> > + unsigned int indirect_levels;
> >
> > if (frames[0].bh == NULL)
> > return;
> >
> > info = &((struct dx_root *)frames[0].bh->b_data)->info;
> > - for (i = 0; i <= info->indirect_levels; i++) {
> > + indirect_levels = info->indirect_levels;
> > + for (i = 0; i <= indirect_levels; i++) {
> > if (frames[i].bh == NULL)
> > break;
> > brelse(frames[i].bh);
> > --
> > Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
> > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
> >
>
>
> Cheers, Andreas
>
>
>
>
>
--
--
Sent by a consultant of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
prev parent reply other threads:[~2019-05-08 8:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-08 6:13 [PATCH] ext4: fix use-after-free in dx_release() Sahitya Tummala
2019-05-08 7:09 ` Andreas Dilger
2019-05-08 8:29 ` Sahitya Tummala [this message]
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=20190508082926.GC19198@codeaurora.org \
--to=stummala@codeaurora.org \
--cc=adilger@dilger.ca \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tytso@mit.edu \
/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 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.