|
Message-ID: <CAKrOiPTdJQ3kLqeet2457sf-fxA=pbhb+VspmiusgF8yJXMHxw@mail.gmail.com> Date: Fri, 25 Feb 2022 19:35:39 +0000 From: naruto canada <narutocanada@...il.com> To: musl@...ts.openwall.com Subject: Re: anyone know how to approach this problem (expect5.x.x hangs) On 2/25/22, naruto canada <narutocanada@...il.com> wrote: > hi > > I'm in the process of porting all my desktop env. over to musl. > I'm about 70% done. I hit a few minor snags but got over them. > I had expected a lot more painful experience, but it turned out ok. > I could not get xserver to compile but will work around using vnc for now. > I am quite happy I got qemu to compile. > The last 30% (Browsers !!!), I dare not approach them right now. > > Anyway, back to my probem, expect5.x.x hangs, > no seg fault, so I do not know how to approach this problem. > normally I do a simple test: > expect -c "spawn ls" # this always succeeds. > > (I use expect to automate password creation) > VNCRP=123456 # need 6 characters # create ~/.vnc/passwd > echo '#!/usr/bin/expect > set timeout -1 > spawn vncpasswd > expect "Password:" > send "'$VNCRP'\r" > expect "Verify:" > send "'$VNCRP'\r" > expect "Would you like to enter a view-only password (y/n)?" > send "n\r" > interact' > /tmp/p.ex > expect /tmp/p.ex > This script works fine under glibc, but hangs under musl. > > I've already tried the same version of expect and patches from > aports-3.15.0/main/expect/*.patch > I got the same result. (it hangs) > > This is not a priority problem for me. I can easily work around it > without using expect. > Just wondering if anyone know how to approach this problem (when there > is no seg fault) I did a quick strace, and compare it with glibc: GLIBC CASE: ... open("/tmp/p.ex", O_RDONLY) = 4 spawn vncpasswd open("/dev/ptmx", O_RDWR) = 4 open("/etc/group", O_RDONLY|O_CLOEXEC) = 5 open("/dev/pts/18", O_RDWR|O_NOCTTY) = 5 Password: Verify: Would you like to enter a view-only password (y/n)? n --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=956, si_status=0, si_utime=0, si_stime=0} --- open("/dev/null", O_RDONLY) = 4 open("/dev/null", O_RDONLY) = 3 open("/dev/null", O_RDONLY) = 2 open("/dev/null", O_RDONLY) = 0 +++ exited with 0 +++ MUSL CASE: open("/tmp/p.ex", O_RDONLY|O_LARGEFILE) = 7 spawn vncpasswd open("/dev/ptmx", O_RDWR|O_NOCTTY|O_LARGEFILE) = 7 open("/dev/pts/3", O_RDWR|O_NOCTTY|O_LARGEFILE) = 8 syscall_397(0xffffff9c, 0xb6f624e0, 0, 0x7ff, 0xbe927e48, 0xb6f624e0) = -1 (errno 38) syscall_397(0x8, 0xb6f58350, 0x1000, 0x7ff, 0xbe927e48, 0xb6f624e0) = -1 (errno 38) syscall_403(0, 0xbe928258, 0xb6e82de0, 0, 0xbe928334, 0) = -1 (errno 38) syscall_389(0x10, 0, 0, 0xb6f62170, 0xbe92815c, 0xbe92808c) = -1 (errno 38) It seems to block or stopped at syscall_389 ( arch/arm/bits/syscall.h.in:#define __NR_membarrier 389 ) cd /build/musl-1.2.2/; grep membarrier * -r ... include/sys/membarrier.h:int membarrier(int, int); ldso/dynlink.c:#include <sys/membarrier.h> ldso/dynlink.c: * if the new dtv pointer is. The __membarrier function has a ldso/dynlink.c: __membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED, 0); ... src/internal/pthread_impl.h:hidden void __membarrier_init(void); src/linux/membarrier.c:#include <sys/membarrier.h> src/linux/membarrier.c:int __membarrier(int cmd, int flags) src/linux/membarrier.c: int r = __syscall(SYS_membarrier, cmd, flags); src/linux/membarrier.c:void __membarrier_init(void) src/linux/membarrier.c: /* If membarrier is linked, attempt to pre-register to be able to use src/linux/membarrier.c: __syscall(SYS_membarrier, MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED, 0); src/linux/membarrier.c:weak_alias(__membarrier, membarrier); src/thread/pthread_create.c:weak_alias(dummy_0, __membarrier_init); src/thread/pthread_create.c: __membarrier_init(); I have no idea how to go further. > Thanks. >
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.