From: Al Viro <viro@zeniv.linux.org.uk>
To: Hillf Danton <hdanton@sina.com>
Cc: syzbot <syzbot+d88a977731a9888db7ba@syzkaller.appspotmail.com>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"syzkaller-bugs@googlegroups.com"
<syzkaller-bugs@googlegroups.com>
Subject: Re: kernel panic: corrupted stack end in dput
Date: Wed, 3 Jul 2019 16:23:34 +0100 [thread overview]
Message-ID: <20190703152334.GI17978@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20190703144000.GH17978@ZenIV.linux.org.uk>
On Wed, Jul 03, 2019 at 03:40:00PM +0100, Al Viro wrote:
> On Wed, Jul 03, 2019 at 02:43:07PM +0800, Hillf Danton wrote:
>
> > > This is very much *NOT* fine.
> > > 1) trylock can fail from any number of reasons, starting
> > > with "somebody is going through the hash chain doing a lookup on
> > > something completely unrelated"
> >
> > They are also a red light that we need to bail out of spiraling up
> > the directory hierarchy imho.
>
> Translation: "let's leak the reference to parent, shall we?"
>
> > > 2) whoever had been holding the lock and whatever they'd
> > > been doing might be over right after we get the return value from
> > > spin_trylock().
> >
> > Or after we send a mail using git. I don't know.
> >
> > > 3) even had that been really somebody adding children in
> > > the same parent *AND* even if they really kept doing that, rather
> > > than unlocking and buggering off, would you care to explain why
> > > dentry_unlist() called by __dentry_kill() and removing the victim
> > > from the list of children would be safe to do in parallel with that?
> > >
> > My bad. I have to walk around that unsafety.
>
> WHAT unsafety? Can you explain what are you seeing and how to
> reproduce it, whatever it is?
BTW, what makes you think that it's something inside dput() itself?
All I see is that at some point in the beginning of the loop body
in dput() we observe a buggered stack.
Is that the first iteration through the loop? IOW, is that just
the place where we first notice preexisting corruption, or is
that something the code called from that loop does? If it's
a stack overflow, I would be very surprised to see it here -
dput() is iterative and it's called on a very shallow stack in
those traces.
What happens if you e.g. turn that
dput(dentry);
in __fput() into
rcu_read_lock(); rcu_read_unlock(); // trigger the check
dput(dentry);
and run your reporducer?
next prev parent reply other threads:[~2019-07-03 15:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20190703064307.13740-1-hdanton@sina.com>
2019-07-03 14:40 ` kernel panic: corrupted stack end in dput Al Viro
2019-07-03 15:23 ` Al Viro [this message]
2019-07-03 15:45 ` Eric Biggers
2019-07-03 16:14 ` John Fastabend
2019-07-01 8:27 syzbot
2019-07-01 12:14 ` syzbot
2019-07-02 13:21 ` Al Viro
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=20190703152334.GI17978@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=hdanton@sina.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=syzbot+d88a977731a9888db7ba@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.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;
as well as URLs for NNTP newsgroup(s).