From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,HTML_MESSAGE,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 3157 invoked from network); 16 Feb 2022 18:37:34 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 16 Feb 2022 18:37:34 -0000 Received: (qmail 7227 invoked by uid 550); 16 Feb 2022 18:37:32 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 7191 invoked from network); 16 Feb 2022 18:37:32 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nWEkvUSb3nVqLZEkoju0GGpVoOVHO0vTkgN0Ao5q97M=; b=C1R4kHUmPxsWPRiRHSyOUPNWmSawvM8agAYgOnae50IV34yaYl8CfdcKK0R5AaCuAV O11wyCMmvheYDR1O5VN8uU0WlQxpvtwrMUJpHqziXIISnaq6icA5ZwMPOaIbFGIdMoM2 mQSidkjP41T+WklCt3Qpl8c5UMhIV4fIhBTc9DC6c6d2Zcl+SD2HR+dTnDtw9lxt9pau PvIV8jeDnhpQbuQAyI9H7FqTsILcdnwfsUh/+kRl1sL4lY4T7po8yzqGPgn6Ng1xJjuL s2cacRnEWEyhFAXlJw+lM73LZHvy2hq/ixMPC3dt5mB/bFC3ISqL3QC7Ei0e4zxKPQkj I1jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nWEkvUSb3nVqLZEkoju0GGpVoOVHO0vTkgN0Ao5q97M=; b=jcSP4LaM/3Co3cd491d1xYLRdZh2bpMycx6s6HUXOGHSAASEfMKRM2oZxE0f/kI2Xz GkgkoukbQXfJkNNC/YAZByFHZo/7acF2kT7kK+PW+7MynIZ+IvovfOboU//TNx7B9y/z grzXqejxqde224+qWrGnkjEtcCqBq4ZBlC02Uc3vvFAugJ2R//4k7r6jrF/AxJ+K+7ac TAlp1PF80ixTXDSHfXoO8TodZ/UEGrt/jDwrd6u61om8gVPbrC1c2FVvYBz19H553uik s+WlPNXIEM6Pad9rb8IG90VUsmRQOI0O8ZX9e0+XYVGGOs2CkoFhCJdi4UEkRVLlTa3a hxbw== X-Gm-Message-State: AOAM533AdVRKtHLbF1HdIFtuVoNBdeFL32XpBskuWhMKzHcegqZ9B+rX VtX2a5i8M/39/8LgOe0s90evNmnZjOkXW1FYWyV8v6BWd+8= X-Google-Smtp-Source: ABdhPJwgJ7vaVYdGYAkTc+zjXp2txY+Mo1xX/s5DVgPMGiApPVbd1CeEBqd0cLmJKx2pq9gi3OYFjmVl+81CnIMp5G0= X-Received: by 2002:a2e:9b4b:0:b0:246:e7d:45c0 with SMTP id o11-20020a2e9b4b000000b002460e7d45c0mr1765954ljj.362.1645036640162; Wed, 16 Feb 2022 10:37:20 -0800 (PST) MIME-Version: 1.0 References: <20220207024056.GY7074@brightrain.aerifal.cx> <20220207210223.GZ7074@brightrain.aerifal.cx> <20220214182952.GI7074@brightrain.aerifal.cx> <20220214220043.GK7074@brightrain.aerifal.cx> <20220215174420.GL7074@brightrain.aerifal.cx> <20220216014153.GM7074@brightrain.aerifal.cx> In-Reply-To: <20220216014153.GM7074@brightrain.aerifal.cx> From: Satadru Pramanik Date: Wed, 16 Feb 2022 13:37:07 -0500 Message-ID: To: Rich Felker Cc: musl@lists.openwall.com Content-Type: multipart/mixed; boundary="000000000000947c0005d826f00c" Subject: Re: [musl] Re: musl getaddr info breakage on older kernels --000000000000947c0005d826f00c Content-Type: multipart/alternative; boundary="000000000000947bfe05d826f00a" --000000000000947bfe05d826f00a Content-Type: text/plain; charset="UTF-8" > > > > - Whether any network traffic occurs when it fails (in the real > environment not a replicated one elsewhere). > > There is no network traffic in the real environment. > - Whether it fails or succeeds under strace (in the real > environment not a replicated one elsewhere). > > It succeeds in strace (in the real environment) > - Whether the real environment involves Docker or not. > > The real environment does not involve docker. > - What's in resolv.conf (in the real environment not a replicated one > elsewhere) and what nameserver software (if known) is running on the > nameserver(s) listed in there. > > The nameserver is picked up from dhcp. The contents of the file are as follows: nameserver 192.168.0.1 search lan. options single-request timeout:1 attempts:5 > - Anything else that might be relevant. > > DNS server is dnsmasq running on a current OpenWRT device. > It's really hard to offer any productive advice when the problem is > unclear. > > Apologies for the confusion. I'm really just trying to debug this getaddrinfo breakage on this older hardware. The docker containers setup is something we use to build packages for this hardware, and our frustration is that the software works perfectly fine in the docker containers, but not on the hardware. > Any other suggestions on how to track down this issue? > > Rather than stepping through, I would put a single breakpoint at a > place you want to see whether execution reaches before running the > test program, then start it and see if the breakpoint fires or not. > Then remove the breakpoint, add a different one, and repeat. For > example, see if __res_msend is ever called, and if so, whether > particular lines of it are reached (or just put breakpoints on some of > the functions it calls, like socket, bind, recvfrom, poll, etc. to see > if they're called). > > It might also be useful to put a breakpoint on clock_gettime and then > 'finish' to see what it returns (in case the problem is something > time64-related). > > The only breakpoint which fixed the execution was for line 20 (which invokes getaddrinfo). Stepping through the __kernel_vsyscall and then continuing is the only way it does not result in failure. Any later breakpoints fail. I went though the other breakpoints as requested. clock_gettime did not fire. Breakpoint 1 at 0x5c2f7: file ../src_musl/compat/time32/clock_gettime32.c, line 9. __res_msend, setsockopt also did not fire. The ones that did fire were: socket, bind, recvfrom, poll, __res_msend_rc, memset, sendto, __get_resolv_conf, pthread_setcancelstate, __pthread_setcancelstate, __lookup_serv, __lookup_name, memcpy When breaking on socket, stepping through the __kernel_vsyscall call after socket and then continuing succeeds. Is it possible that the socket is not waiting long enough for a response from __kernel_vsyscall? Has that changed? Breaking, stepping, and continuing on every other function above fails. The gdb log is attached. Regards, Satadru --000000000000947bfe05d826f00a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


- Whether any network traffic occurs when it fails (in the real
=C2=A0 environment not a replicated one elsewhere).


There is no network traffic in the rea= l environment.
=C2=A0
- Whether it fails or succeeds under strace (in the real
=C2=A0 environment not a replicated one elsewhere).

It succeeds in strace (in the real environment)
=

=C2=A0
- Whether the real environment involves Docker or not.

The real environment does not involve docker.

=C2=A0
- What's in resolv.conf (in the real environment not a replicated one =C2=A0 elsewhere) and what nameserver software (if known) is running on the=
=C2=A0 nameserver(s) listed in there.

The nameserver is picked up from dhcp. The contents o= f the file are as follows:
nameserver 192.168.0.1
searc= h lan.
options single-request timeout:1 attempts:5
=C2= =A0
- Anything else that might be relevant.

DNS server is dnsmasq running on a current OpenWRT de= vice.
=C2=A0
It's really hard to offer any productive advice when the problem is
unclear.

Apologies for the confusion.
I'm really= just trying to debug this getaddrinfo breakage on this older hardware. The= docker containers setup is something we use to build packages for this har= dware, and our frustration is that the software works perfectly fine in the= docker containers, but not on the hardware.

> Any other suggestions on how to track down this issue?

Rather than stepping through, I would put a single breakpoint at a
place you want to see whether execution reaches before running the
test program, then start it and see if the breakpoint fires or not.
Then remove the breakpoint, add a different one, and repeat. For
example, see if __res_msend is ever called, and if so, whether
particular lines of it are reached (or just put breakpoints on some of
the functions it calls, like socket, bind, recvfrom, poll, etc. to see
if they're called).

It might also be useful to put a breakpoint on clock_gettime and then
'finish' to see what it returns (in case the problem is something time64-related).


The only breakpoint which fixed the executi= on=C2=A0was for line 20 (which invokes getaddrinfo). Stepping through the _= _kernel_vsyscall and then continuing is the only way it does not result in = failure.

Any later brea= kpoints fail.

I went though the other breakpoints = as requested.
clock_gettime did not fire.

Breakpoint 1 at 0x5c2f7: file ../src_musl/compat/time32/clock_gettime= 32.c, line 9.
__res_msend, setsockopt also did not fire.
<= /div>
The ones that did fire were: socket, bind, recvfrom, poll,=C2=A0_= _res_msend_rc, memset, sendto,=C2=A0__get_resolv_conf,=C2=A0pthread_setcanc= elstate, __pthread_setcancelstate,=C2=A0__lookup_serv,=C2=A0__lookup_name, = memcpy

When breaking on socket, stepping through t= he __kernel_vsyscall call after socket and then continuing succeeds.
<= div>
Is it possible that the socket is not waiting long enoug= h for a response from __kernel_vsyscall? Has that changed?
Breaki= ng, stepping, and continuing on every other function above fails.

The gdb log is attached.

Regar= ds,

Satadru
=C2=A0
--000000000000947bfe05d826f00a-- --000000000000947c0005d826f00c Content-Type: application/x-gzip; name="gdb.out.txt.gz" Content-Disposition: attachment; filename="gdb.out.txt.gz" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzpw9gz80 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 --000000000000947c0005d826f00c--