Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 31 May 2009 15:54:00 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Jilles Tjoelker <jilles@stack.nl>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Dmitry Chagin <dchagin@freebsd.org>
Subject:   Re: svn commit: r193165 - head/sys/compat/linux
Message-ID:  <20090531125400.GU1927@deviant.kiev.zoral.com.ua>
In-Reply-To: <20090531124555.GT1927@deviant.kiev.zoral.com.ua>
References:  <200905311204.n4VC41GR042549@svn.freebsd.org> <20090531122642.GA18020@stack.nl> <20090531124555.GT1927@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

--5GtKBH2IVcxTg5OS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sun, May 31, 2009 at 03:45:55PM +0300, Kostik Belousov wrote:
> On Sun, May 31, 2009 at 02:26:42PM +0200, Jilles Tjoelker wrote:
> > On Sun, May 31, 2009 at 12:04:01PM +0000, Dmitry Chagin wrote:
> > > Author: dchagin
> > > Date: Sun May 31 12:04:01 2009
> > > New Revision: 193165
> > > URL: http://svn.freebsd.org/changeset/base/193165
> >=20
> > > Log:
> > >   Move new socket flags handling into a separate function as Linux
> > >   introduced more syscalls which uses these flags.
> >=20
> > I think this does not fulfill the purpose of LINUX_SOCK_CLOEXEC exactly:
> > if another thread forks and execs at the wrong time, it may inherit the
> > socket without the CLOEXEC flag set.
> >=20
> > The obvious way to fix this is to implement SOCK_CLOEXEC in the native
> > syscalls, in such a way that other threads can never see the new fd
> > without the CLOEXEC flag set.
> >=20
> > That could be fairly complicated and it is a pretty rare situation,
> > however.
>=20
> This is well-known issue, that is omnipresent in the linuxolator.
> Your analysis is right, but until we implement corresponding
> facilities for the native ABI, linuxolator will be in is this state.
> Whether we really need to do the work for freebsd binaries is
> debatable.
>=20
> For the typical case, see linux_common_open().=20

Mostly replying to myself. The fact that your statement about race is
right actually points to the deficiency in the implementation of the
linux_execve(), as opposed to the bug in the LINUX_SOCK_CLOEXEC handling.

Complete execve(2) implementation should do single-threading for the
curproc, and singlethreading happens only when all threads except
the one doing execve cross the boundary. See call to thread_single
in kern_execve. This does not really happen for linux ABI processes,
since multithreading is implemented as multiprocessing. When (if) a
singlethreading solution will be implemented for linux ABI, exec cannot
happen between these two calls, since the thread is still in kernel not
on the single-threading boundary.

--5GtKBH2IVcxTg5OS
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEARECAAYFAkoifegACgkQC3+MBN1Mb4h9/wCfSQXzhPce7YSbTDsjS3OGstoH
HikAniPvTjdVE2WG9MDKvzG5dGf2zYm4
=v8gh
-----END PGP SIGNATURE-----

--5GtKBH2IVcxTg5OS--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090531125400.GU1927>