From: Szabolcs Nagy <nsz@port70.net>
To: musl@lists.openwall.com
Subject: Re: Problems that emerged when trying to port dosemu2
Date: Sun, 3 Dec 2017 15:49:20 +0100 [thread overview]
Message-ID: <20171203144920.GZ15263@port70.net> (raw)
In-Reply-To: <4b3b4442-af00-6134-b284-8699dddb35ea@mailbox.org>
* bluemoon <blaumolch@mailbox.org> [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’s going on here (patches are below):
> https://github.com/stsp/dosemu2/issues/537#issuecomment-346177776
>
> > 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.
>
> To make it work the following two patches were applied:
>
> --- 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 @@
>
> #undef syscall
>
> -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;
>
> --- src/signal/sigaltstack.c.orig 2017-10-31 20:13:58.000000000 +0100
> +++ src/signal/sigaltstack.c 2017-11-21 20:56:59.740814704 +0100
> @@ -4,15 +4,5 @@
>
> int sigaltstack(const stack_t *restrict ss, stack_t *restrict old)
> {
> - if (ss) {
> - if (ss->ss_size < MINSIGSTKSZ) {
> - errno = 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 = 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);
> }
next prev parent reply other threads:[~2017-12-03 14:49 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-03 10:50 bluemoon
2017-12-03 14:49 ` Szabolcs Nagy [this message]
2017-12-03 22:01 ` Rich Felker
2017-12-23 14:35 ` bluemoon
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=20171203144920.GZ15263@port70.net \
--to=nsz@port70.net \
--cc=musl@lists.openwall.com \
/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.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).