Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20201218193849.GA7530@voyager>
Date: Fri, 18 Dec 2020 20:38:49 +0100
From: Markus Wichmann <nullplan@....net>
To: musl@...ts.openwall.com
Subject: Re: Musl on Cortex-M Devices

On Wed, Dec 16, 2020 at 07:23:49PM -0500, Rich Felker wrote:
> On Wed, Dec 16, 2020 at 06:43:15PM -0500, Jesse DeGuire wrote:
> > diff --git a/src/thread/arm/__unmapself.s b/src/thread/arm/__unmapself.s
> > index 29c2d07b..fe0406e3 100644
> > --- a/src/thread/arm/__unmapself.s
> > +++ b/src/thread/arm/__unmapself.s
> > @@ -3,7 +3,7 @@
> >  .global __unmapself
> >  .type   __unmapself,%function
> >  __unmapself:
> > -	mov r7,#91
> > +	movs r7,#91
> >  	svc 0
> > -	mov r7,#1
> > +	movs r7,#1
> >  	svc 0
>
> OK, but this file can't be used on nommu anyway. Instead the generic C
> version has to be used.
>

Speaking of that (C) version, maybe someone should note down somewhere
that it is only safe to call if simultaneous calls from other threads
are precluded somehow. That function uses global variables, so if
multiple threads call it at the same time, there will be blood (well,
there will be clobbering in any case). Which is fulfilled at the moment:
The only call site of __unmapself() is pthread_exit(), after getting the
thread list lock. That is a global lock, so further threads also
exitting would have to queue up there. But I think it is rather
non-intuitive that the thread-list lock happens to also protect the
global variables in __unmapself.c. And that is a property of the C
version not shared by the assembler versions, which are all thread-safe.

Also, why can't this be used on nommu? I thought the only differences
between nommu and mmu were that you can't call mmap() except for
MAP_ANON, and you can't call fork(). This merely runs munmap() on a
MAP_ANON region, and exit(), and so does the C version, except the C
version sets up its own stack to do so, in order to not saw off the
branch it is sitting on.  What am I missing?

Ciao,
Markus

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.