From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12610 Path: news.gmane.org!.POSTED!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: Program with constructor function segfaults frequently with musl Date: Thu, 15 Mar 2018 11:35:31 -0400 Message-ID: <20180315153531.GG1436@brightrain.aerifal.cx> References: <20180315110143.GU4418@port70.net> <20180315111705.GV4418@port70.net> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: blaine.gmane.org 1521128026 10079 195.159.176.226 (15 Mar 2018 15:33:46 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 15 Mar 2018 15:33:46 +0000 (UTC) User-Agent: Mutt/1.5.21 (2010-09-15) To: musl@lists.openwall.com Original-X-From: musl-return-12624-gllmg-musl=m.gmane.org@lists.openwall.com Thu Mar 15 16:33:42 2018 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 1ewUsv-0002Xz-VS for gllmg-musl@m.gmane.org; Thu, 15 Mar 2018 16:33:42 +0100 Original-Received: (qmail 3459 invoked by uid 550); 15 Mar 2018 15:35:44 -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 3426 invoked from network); 15 Mar 2018 15:35:43 -0000 Content-Disposition: inline In-Reply-To: Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:12610 Archived-At: On Thu, Mar 15, 2018 at 11:28:56AM +0000, Bracken Dawson wrote: > Sadly my use case is to set a given mnt namespace before go becomes > multi-threaded, which happens before the go main() function, so I do depend > on reading argv in the constructor, I mean I could use a file or something > else, but would rather not. > > I guess this is just something I can get away with today in glibc that musl > will never support. > > Thanks for looking though. If you really insist on trying to access the command line from a ctor, you can open /proc/self/cmdline and read it in. However as noted before there are problems with assuming the process is not yet multithreaded just because you're in a ctor and other approaches (exec via helper) would probably be better. Rich > On 15 March 2018 at 11:17, Szabolcs Nagy wrote: > > > * Szabolcs Nagy [2018-03-15 12:01:44 +0100]: > > > * Bracken Dawson [2018-03-15 10:38:31 +0000]: > > > > I have been having trouble getting a cgo program to run with musl, it > > has > > > > been segfaulting frequently and with 'No stack' when run under gdb. > > > > > > > > I have managed to reproduce such a failure in pure c with a very small > > > > example: > > > > > > > > ``` > > > > #include > > > > #include > > > > #include > > > > > > > > __attribute__((constructor)) void enter_namespace(int argc, char > > *argv[]) { > > > > > > the arguments passed to ctors are not part of the elf abi > > > http://www.sco.com/developers/gabi/latest/ch5.dynamic.html#init_fini > > > > ah this does not explain the type signature, the right link is > > http://www.sco.com/developers/gabi/latest/ch4.sheader.html#init_array > > > > > (and it cannot really work for dynamically loaded libraries anyway: > > > the application can arbitrarily clobber argv by that time) > > > > > > glibc passes these arguments as an extension (the semantics > > > for dlopened libraries is unclear), which happens to work > > > since the calling convention of functions with no arguments > > > allows this on all supported targets. > > > > > > (note that there are security hardenning solutions that check > > > the call site function signature against the callee and abort on > > > mismatch and such extension would not work with that) > > > > > > is this cgo that tries to capture argv in a ctor or some other > > > c library? (in either case you should first try to solve it > > > portably without depending on the glibc extension) > >