From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12196 Path: news.gmane.org!.POSTED!not-for-mail From: Szabolcs Nagy Newsgroups: gmane.linux.lib.musl.general Subject: Re: Problems that emerged when trying to port dosemu2 Date: Sun, 3 Dec 2017 15:49:20 +0100 Message-ID: <20171203144920.GZ15263@port70.net> References: <4b3b4442-af00-6134-b284-8699dddb35ea@mailbox.org> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1512312576 23447 195.159.176.226 (3 Dec 2017 14:49:36 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 3 Dec 2017 14:49:36 +0000 (UTC) User-Agent: Mutt/1.6.0 (2016-04-01) To: musl@lists.openwall.com Original-X-From: musl-return-12212-gllmg-musl=m.gmane.org@lists.openwall.com Sun Dec 03 15:49:31 2017 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1eLVaC-0005if-B7 for gllmg-musl@m.gmane.org; Sun, 03 Dec 2017 15:49:28 +0100 Original-Received: (qmail 7877 invoked by uid 550); 3 Dec 2017 14:49:32 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 7856 invoked from network); 3 Dec 2017 14:49:32 -0000 Mail-Followup-To: musl@lists.openwall.com Content-Disposition: inline In-Reply-To: <4b3b4442-af00-6134-b284-8699dddb35ea@mailbox.org> Xref: news.gmane.org gmane.linux.lib.musl.general:12196 Archived-At: * bluemoon [2017-12-03 11:50:34 +0100]: > My knowledge of the matter is too limited to explain it in my own words, = but > he summarized what=E2=80=99s going on here (patches are below): > https://github.com/stsp/dosemu2/issues/537#issuecomment-346177776 >=20 > > The checks that you remove, are nonsense: > > they check for "ss_size" and return ENOMEM > > even for SS_DISABLE. They check for ~SS_DISABLE > > and return error for SS_AUTODISARM, even > > though it is defined in their headers. Overall > > they try to check the syscall parameters - > > something they should never do simply because > > libc does not understand the syscall parameters. > > It should just call the syscall - not more, not less. > > syscall understands its parameters, so it will > > check them correctly and return error as appropriate. > > Check from musl should be removed, and I think > > it would be good to try to submit that change. > > > > Stack-protector problem is a kernel mis-feature, > > and a very unfortunate one. We should pester > > Andy Lutomirski (@amluto) to finally fix it. :) > > I don't know if musl can accept this patch, maybe > > it can if the attribute is put under #ifdef __GNUC__ > > check. >=20 > To make it work the following two patches were applied: >=20 > --- src/misc/syscall.c.orig 2017-10-31 20:13:58.000000000 +0100 > +++ src/misc/syscall.c 2017-11-21 18:36:38.912082672 +0100 > @@ -3,7 +3,7 @@ >=20 > #undef syscall >=20 > -long syscall(long n, ...) > +__attribute__((optimize("no-stack-protector"))) long syscall(long n, ...) > { changing fs/gs behind the back of the c runtime is not guaranteed to work, but it makes sense to me to compile syscall.c without ssp instrumentation to allow certain hacks. (but i think this should be done in the makefile) > va_list ap; > syscall_arg_t a,b,c,d,e,f; >=20 > --- src/signal/sigaltstack.c.orig 2017-10-31 20:13:58.000000000 +01= 00 > +++ src/signal/sigaltstack.c 2017-11-21 20:56:59.740814704 +0100 > @@ -4,15 +4,5 @@ >=20 > int sigaltstack(const stack_t *restrict ss, stack_t *restrict old) > { > - if (ss) { > - if (ss->ss_size < MINSIGSTKSZ) { > - errno =3D ENOMEM; > - return -1; > - } i think this part has to be kept for conformance reasons: the kernel does not check MINSIGSTKSZ (it does not even know how it is defined in musl, so it is musl abi, not kernel abi), but posix requires the check. > - if (ss->ss_flags & ~SS_DISABLE) { > - errno =3D EINVAL; > - return -1; > - } this is another conformance check, but one can argue that linux extensions should be allowed here. (it's unfortunate that some useful linux extensions are in conflict with posix requirements..) > - } > return syscall(SYS_sigaltstack, ss, old); > }