From: Al Viro <viro@zeniv.linux.org.uk>
To: "dmitry.torokhov@gmail.com" <dmitry.torokhov@gmail.com>
Cc: Mukesh Ojha <mojha@codeaurora.org>,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
Gaurav Kohli <gkohli@codeaurora.org>,
Peter Hutterer <peter.hutterer@who-t.net>,
Martin Kepplinger <martink@posteo.de>,
"Paul E. McKenney" <paulmck@linux.ibm.com>
Subject: Re: [PATCH v2] Input: uinput: Avoid Object-Already-Free with a global lock
Date: Tue, 23 Apr 2019 13:15:40 +0100 [thread overview]
Message-ID: <20190423121539.GM2217@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20190423110611.GL2217@ZenIV.linux.org.uk>
On Tue, Apr 23, 2019 at 12:06:12PM +0100, Al Viro wrote:
> On Tue, Apr 23, 2019 at 08:49:44AM +0000, dmitry.torokhov@gmail.com wrote:
> > On Tue, Apr 23, 2019 at 12:51:13PM +0530, Mukesh Ojha wrote:
>
> > > I have taken care this case from ioctl and release point of view.
> > >
> > > Even if the release gets called first it will make the
> > > file->private_data=NULL.
> > > and further call to ioctl will not be a problem as the check is already
> > > there.
> >
> > Al, do we have any protections in VFS layer from userspace hanging onto
> > a file descriptor and calling ioctl() on it even as another thread
> > calls close() on the same fd?
> >
> > Should the issue be solved by individual drivers, or more careful
> > accounting for currently running operations is needed at VFS layer?
>
> Neither. An overlap of ->release() and ->ioctl() is possible only
> if you've got memory corruption somewhere.
>
> close() overlapping ioctl() is certainly possible, and won't trigger
> that at all - sys_ioctl() holds onto reference to struct file, so
> its refcount won't reach zero until we are done with it.
I'd like to see a reproducer; _if_ we are really getting such overlaps,
we have something buggering struct file refcounts (e.g. stray fput()
eventually leading to dangling pointer in descriptor table) or an
outright memory corruption mangling descriptor table/kernel stack/
refcount/->private_data/etc.
Details, please - I tried to google some context for that, but hadn't
found anything useful ;-/
next prev parent reply other threads:[~2019-04-23 12:15 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-10 7:59 [PATCH v2] Input: uinput: Avoid Object-Already-Free with a global lock Mukesh Ojha
2019-04-15 10:05 ` Mukesh Ojha
2019-04-18 1:43 ` dmitry.torokhov
[not found] ` <bb92c3f2-faf1-04ec-4c67-3aba56c507a9@codeaurora.org>
[not found] ` <a4d1a2f3-1db7-e300-9569-7b7a2fadd64e@codeaurora.org>
2019-04-19 7:11 ` dmitry.torokhov
2019-04-19 8:43 ` Mukesh Ojha
2019-04-23 3:28 ` dmitry.torokhov
[not found] ` <17f4a0be-ab04-8537-9197-32fbca807f3f@codeaurora.org>
2019-04-23 8:49 ` dmitry.torokhov
2019-04-23 11:06 ` Al Viro
2019-04-23 12:15 ` Al Viro [this message]
2019-04-24 12:10 ` Mukesh Ojha
2019-04-24 13:07 ` Al Viro
2019-04-24 14:09 ` Mukesh Ojha
2019-04-24 22:56 ` Al Viro
2019-05-01 7:50 ` Mukesh Ojha
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=20190423121539.GM2217@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=dmitry.torokhov@gmail.com \
--cc=gkohli@codeaurora.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martink@posteo.de \
--cc=mojha@codeaurora.org \
--cc=paulmck@linux.ibm.com \
--cc=peter.hutterer@who-t.net \
/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