[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#916779: libc6-armhf-cross: strerror(-3) sets errno to ENOMEM



On 2018-12-21 12:19, Tim Rühsen wrote:
> On 12/21/18 12:09 PM, Aurelien Jarno wrote:
> > On 2018-12-21 11:51, Tim Rühsen wrote:
> >> On 12/19/18 12:55 AM, Aurelien Jarno wrote:
> >>> On 2018-12-18 22:11, Aurelien Jarno wrote:
> >>>> On 2018-12-18 21:34, Aurelien Jarno wrote:
> >>>>> Hi,
> >>>>>
> >>>>> On 2018-12-18 15:15, Tim Ruehsen wrote:
> >>>>>> Package: libc6-armhf-cross
> >>>>>> Version: 2.28-2cross2
> >>>>>> Severity: normal
> >>>>>>
> >>>>>> Dear Maintainer,
> >>>>>>
> >>>>>> currently strerror(-3) sets errno unexpectedly to ENOMEM (12).
> >>>>>>
> >>>>>> The expected errno value would be either EINVAL or not touching errno
> >>>>>> at all.
> >>>>>>
> >>>>>> This behavior is relatively new and causes some CI cross builds to fail.
> >>>>>> The failing test is a gnulib test (test-strerror.c).
> >>>>>>
> >>>>>
> >>>>> I can reproduce the issue with libc6-armhf-cross 2.28-2cross2 and
> >>>>> qemu-arm-static 1:3.1+dfsg-1, but not with the same binary on real
> >>>>> hardware nor on qemu-user-static 1:2.12+dfsg-3+b1. I would therefore
> >>>>> think it's a qemu bug.
> >>>>
> >>>> Hmm, I am wrong, I can actually reproduce it with qemu-user-static
> >>>> version 1:2.12+dfsg-3+b1. But I can't reproduce it on real hardware.
> >>>
> >>> It seems to have been caused by this upstream patch:
> >>>
> >>> | commit 1294b1892e19d70e9e4dca0a2f3e39497f262a42
> >>> | Author: Wilco Dijkstra <wdijkstr@arm.com>
> >>> | Date:   Thu Mar 15 17:57:03 2018 +0000
> >>> | 
> >>> |     Add support for sqrt asm redirects
> >>> |     
> >>> |     This patch series cleans up the many uses of  __ieee754_sqrt(f/l) in GLIBC.
> >>> |     The goal is to enable GCC to do the inlining, and if this fails call the
> >>> |     __ieee754_sqrt function.  This is done by internally declaring sqrt with asm
> >>> |     redirects.  The compat symbols and sqrt wrappers need to disable the redirect.
> >>> |     The redirect is also disabled if there are already redirects defined when
> >>> |     using -ffinite-math-only.
> >>> |     
> >>> |     All math functions (but not math tests, non-library code and libnldbl) are
> >>> |     built with -fno-math-errno which means GCC will typically inline sqrt as a
> >>> |     single instruction.  This means targets are no longer forced to add a special
> >>> |     inline for sqrt.
> >>> |     
> >>> |             * include/math.h (sqrt): Declare with asm redirect.
> >>> |             (sqrtf): Likewise.
> >>> |             (sqrtl): Likewise.
> >>> |             (sqrtf128): Likewise.
> >>> |             * Makeconfig: Add -fno-math-errno for libc/libm, but build testsuite,
> >>> |             nonlib and libnldbl with -fmath-errno.
> >>> |             * math/w_sqrt_compat.c: Define NO_MATH_REDIRECT.
> >>> |             * math/w_sqrt_template.c: Likewise.
> >>> |             * math/w_sqrtf_compat.c: Likewise.
> >>> |             * math/w_sqrtl_compat.c: Likewise.
> >>> |             * sysdeps/i386/fpu/w_sqrt.c: Likewise.
> >>> |             * sysdeps/i386/fpu/w_sqrt_compat.c: Likewise.
> >>> |             * sysdeps/generic/math-type-macros-float128.h: Remove math.h and
> >>> |             complex.h.
> >>>
> >>> And more precisely by building libc with -fno-math-errno.
> >>
> >> Thanks for looking into it.
> >>
> >> How is the proceeding ? Is there enough info to fix (or report upstream)
> >> ? If not, what has to be done ?
> > 
> > No it's not enough to fix it or report it upstream. We still have to
> > understand the exact issue. For me it's not yet clear if the bug is in
> > QEMU or in glibc. The fact that it works fine on real hardware would
> > go towards a QEMU bug, but there is no proof yet.
> 
> I think it's pretty clear: Under no circumstances must strerror() set
> errno to ENOMEM because this is against the specs [1].

I fully agree with that.

> That makes it pretty likely an upstream issue. Not sure about any Debian
> patches playing a role.

I disagree with that. This is a glibc upstream issue if the source code
is properly translated into binary code and if it is correctly executed
by the (virtual) CPU. I am still not convinced about both here.

Regards,
Aurelien

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net

Attachment: signature.asc
Description: PGP signature


Reply to: