delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2011/04/19/18:45:14

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-6.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD
X-Spam-Check-By: sourceware.org
Message-ID: <4DAE1051.7040500@redhat.com>
Date: Tue, 19 Apr 2011 16:44:33 -0600
From: Eric Blake <eblake AT redhat DOT com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.15) Gecko/20110318 Red Hat/3.1.9-3.el6_0 Mnenhy/0.8.3 Thunderbird/3.1.9
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: 0417 snapshot: exec() fails on /proc/self/exe
References: <BANLkTimerprgbPRa1jMaTH4NY-F7_yz--w AT mail DOT gmail DOT com>
In-Reply-To: <BANLkTimerprgbPRa1jMaTH4NY-F7_yz--w@mail.gmail.com>
OpenPGP: url=http://people.redhat.com/eblake/eblake.gpg
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

--------------enig59D58569A19B7586B0FFF36C
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On 04/19/2011 02:16 PM, Andy Koppe wrote:
> int main(int argc, char *argv[])
> {
>   if (argc > 1 && !fork()) {
>     execl("/proc/self/exe", argv[0], (char *)0);
>     puts(strerror(errno));
>   }
>   return 0;
> }
>=20
> $ cc test.c
>=20
> $ ./a bla
> Bad file descriptor
>=20
> With 1.7.9, it prints nothing, which is the expected behaviour.
> Looking at POSIX, EBADF is not a valid errno for exec().

EBADF is not listed for execl(), but _is_ listed for fexecve(), and when
you consider that /proc/self is a special file system that opens file
descriptors rather than files, it makes (a bit) of sense.  At any rate,
POSIX states that other errors than those documented (such as EBADF for
execl()) may be returned if the condition for those errors matches other
use of that errno value and does not skip over any existing mandated
errors.  It also means that maybe cygwin should behave as if O_EXEC
rather than O_RDONLY were used when populating "/proc/self/exe", seeing
as how execl() on that file basically boils down to an fexecve() call.

--=20
Eric Blake   eblake AT redhat DOT com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org


--------------enig59D58569A19B7586B0FFF36C
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
Comment: Public key at http://people.redhat.com/eblake/eblake.gpg
Comment: Using GnuPG with Red Hat - http://enigmail.mozdev.org/

iQEcBAEBCAAGBQJNrhBRAAoJEKeha0olJ0Nqqs8H/j5428IcWZFNY2alG74wuUf5
1F+dNFdUec3dO+XpdBJAOaYow5++OJF138npC34zVy9gLy50Ty6fG611TDhjMed8
hzpGe/3OCX5Wsxsxm6pZzxq3ZXlvL84H2ftwNB3sZ7pd0oU03VRKPFIKMAZjEHdw
mord6/DXjL9X64/mxRBgiiy9z9IFW8L2eUXja2nQJFLMmUXdxb6WNQdt7Y3Eps/Z
TZHlJfxPSZuw1qPUh0thLtMK6OsAv/NocZXMccGJdFN/n/3Gg1+X69Bwx7XCkPwR
2L4y6kQkscD3WACi6egMP8LTp6IAaZ+jxuMURGEApQY3VdxjlUXkycWb+wAf/hs=
=Lge4
-----END PGP SIGNATURE-----

--------------enig59D58569A19B7586B0FFF36C--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019