Date: Mon, 5 May 2014 22:51:39 +0200 From: Mateusz Guzik <mjguzik@gmail.com> To: Chagin Dmitry <dchagin@freebsd.org> Cc: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: Re: svn commit: r265327 - in user/dchagin/lemul/sys: amd64/linux amd64/linux32 compat/linux conf i386/linux modules/linux modules/linux64 Message-ID: <20140505205138.GB17831@dft-labs.eu> In-Reply-To: <20140505202533.GA9747@dchagin.static.corbina.net> References: <201405041559.s44FxWdj053353@svn.freebsd.org> <20140504180749.GA17835@dft-labs.eu> <20140505050204.GA1307@dchagin.static.corbina.net> <20140505153218.GA17831@dft-labs.eu> <20140505202533.GA9747@dchagin.static.corbina.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, May 06, 2014 at 12:25:33AM +0400, Chagin Dmitry wrote:
> On Mon, May 05, 2014 at 05:32:18PM +0200, Mateusz Guzik wrote:
> > On Mon, May 05, 2014 at 09:02:04AM +0400, Chagin Dmitry wrote:
> > > On Sun, May 04, 2014 at 08:07:49PM +0200, Mateusz Guzik wrote:
> > > > switch (args->op) {
> > > > case LINUX_EPOLL_CTL_MOD:
> > > > /*
> > > > * We don't memorize which events were set for this FD
> > > > * on this level, so just delete all we could have set:
> > > > * EVFILT_READ and EVFILT_WRITE, ignoring any errors
> > > > */
> > > > error = epoll_delete_all_events(td, epfp, args->fd);
> > > >
> > > > Again a lookup.
> > > >
> > > > Whether this particular problem could be used to do something nasty I don't
> > > > know, but playing like this is asking for trouble.
> > > >
> > > > The only solution I see is to modify kqueue functions to accept fps.
> > > >
> > >
> > > reason? to prevent extra fget? or something else?
> > >
> >
> > Having multpiple lookups for the same fd number may lead to different
> > fps, which may or may not be used to cause inconsistencies which in turn
> > may or may not be exploitable to either crash the kernel or escalate
> > privileges.
> >
> > That said, the concern is that a malicious user could try to work
> > something out from this.
> >
>
> Hi, may be enough to keep file ref?
>
Yeah, just fget what you need and only pass fp around. Note to check
that fp->f_type == DTYPE_KQUEUE.
So just change kern_kevent to grab fp instead of fd and assert proper
fp->f_type.
Similarly for other functions grabbing fd instead of fp (if any).
--
Mateusz Guzik <mjguzik gmail.com>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140505205138.GB17831>
