Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 25 Feb 2022 19:35:39 +0000
From: naruto canada <>
Subject: Re: anyone know how to approach this problem (expect5.x.x hangs)

On 2/25/22, naruto canada <> 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:
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
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 +++

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/ __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,
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.