From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb35.google.com (mail-yb1-xb35.google.com [IPv6:2607:f8b0:4864:20::b35]) by sourceware.org (Postfix) with ESMTPS id D706438303C3 for ; Wed, 22 Jun 2022 22:38:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D706438303C3 Received: by mail-yb1-xb35.google.com with SMTP id r3so32712035ybr.6 for ; Wed, 22 Jun 2022 15:38:14 -0700 (PDT) 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:content-transfer-encoding; bh=PQOeSVuWZImp816CWBTZtFoUqZNcKvXIvZteo2DWndk=; b=2raFCTM0UpOlSejoqniAWFuQpgATQ1HxBwcplaonnpP80r17n8oSpKMN8UBYIXmyMR iXbEA2K19J8jcDiosuvvQN7j9OF6grJGZiWfDt4lqix7/We4bUCYbScH723UNbz/Av/1 AARtQ8PbiYsb86FPLa2IwPYE8eqhtBdsna1vpDHceq10bCBJw7Obmlf6q2IHK8f3n+oe 6lW683Cnx2RwqUCa5iIgaRKrn5QuspuPA3beUE/5ycTtCw398Lga7qkoqUpal/155YLN L1VWFb8XW53Avj09cxmCSLyerwoPjVJSkRHYwSDEFscoYHqv0VcJfH52ulLQ8gwM+rHX g1Ow== X-Gm-Message-State: AJIora8hM1jJnMEryVw3Gk88VEtNbhUIZi9TQJLPthHCLOxirqtChdVW 5Zy19F+vEEP6aTgUQAaRqzQJ13DyynNHFPMBtzg= X-Google-Smtp-Source: AGRyM1sQFpeBF+CeIDCdjEnDW3ZXK/FrlKHfoeUxsXqNXZht+mLkxP40xuA//yJrF3WZGqDUSUCyHE6Vuz7oVz4xrD0= X-Received: by 2002:a05:6902:706:b0:669:2493:acd8 with SMTP id k6-20020a056902070600b006692493acd8mr6257046ybt.208.1655937494230; Wed, 22 Jun 2022 15:38:14 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Noah Goldstein Date: Wed, 22 Jun 2022 15:38:02 -0700 Message-ID: Subject: Re: [PATCH v2] stdlib: Remove attr_write from mbstows if dst is NULL [BZ: 29265] To: Mark Wielaard Cc: Siddhesh Poyarekar , GNU C Library Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Jun 2022 22:38:17 -0000 On Wed, Jun 22, 2022 at 3:06 PM Mark Wielaard wrote: > > Hi Noah, > > On Wed, Jun 22, 2022 at 02:38:07PM -0700, Noah Goldstein wrote: > > I think it should be just mbstowcs, we don't pass dstlen > > > > Does: > > > > ``` > > diff --git a/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h > > index d9c2d822a5..ece553df74 100644 > > --- a/stdlib/bits/stdlib.h > > +++ b/stdlib/bits/stdlib.h > > @@ -96,10 +96,10 @@ extern size_t __mbstowcs_chk (wchar_t *__restrict _= _dst, > > const char *__restrict __src, > > size_t __len, size_t __dstlen) __THROW > > __attr_access ((__write_only__, 1, 3)) __attr_access ((__read_only= __, 2)); > > -extern size_t __REDIRECT_NTH (__mbstowcs_chk_nulldst, > > +extern size_t __REDIRECT_NTH (__mbstowcs_nulldst, > > (wchar_t *__restrict __dst, > > const char *__restrict __src, > > - size_t __len), mbstowcs_chk) > > + size_t __len), mbstowcs) > > __attr_access ((__read_only__, 2)); > > extern size_t __REDIRECT_NTH (__mbstowcs_alias, > > (wchar_t *__restrict __dst, > > @@ -118,7 +118,7 @@ __NTH (mbstowcs (wchar_t *__restrict __dst, const > > char *__restrict __src, > > size_t __len)) > > { > > if (__builtin_constant_p (__dst =3D=3D NULL) && __dst =3D=3D NULL) > > - return __mbstowcs_chk_nulldst (__dst, __src, __len); > > + return __mbstowcs_nulldst (__dst, __src, __len); > > else > > return __glibc_fortify_n (mbstowcs, __len, sizeof (wchar_t), > > __glibc_objsize (__dst), __dst, __src, __len); > > ``` > > > > Work? > > I hope I applied to correctly, there were some whitespace issues. > But no, that causes: > > make[2]: Entering directory '/srv/glibc/glibc/debug' > g++ /srv/glibc/glibc-obj/debug/tst-fortify-cc-default-1.cc -c -I/srv/glib= c/glibc-obj/ -g -O2 -Wall -Wwrite-strings -Wundef -Werror -fmerge-all-cons= tants -frounding-math -fno-stack-protector -fno-common -fpie -D_FORTIFY_S= OURCE=3D1 -Wno-format -Wno-deprecated-declarations -Wno-error -I../inc= lude -I/srv/glibc/glibc-obj/debug -I/srv/glibc/glibc-obj -I../sysdeps/uni= x/sysv/linux/x86_64/64 -I../sysdeps/unix/sysv/linux/x86_64 -I../sysdeps/u= nix/sysv/linux/x86/include -I../sysdeps/unix/sysv/linux/x86 -I../sysdeps/x= 86/nptl -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/x86_64/nptl= -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux -I../s= ysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet= -I../sysdeps/unix/sysv -I../sysdeps/unix/x86_64 -I../sysdeps/unix -I..= /sysdeps/posix -I../sysdeps/x86_64/64 -I../sysdeps/x86_64/fpu/multiarch = -I../sysdeps/x86_64/fpu -I../sysdeps/x86/fpu -I../sysdeps/x86_64/multiarc= h -I../sysdeps/x86_64 -I../sysdeps/x86/include -I../sysdeps/x86 -I../sys= deps/ieee754/float128 -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ie= ee754/ldbl-96 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I= ../sysdeps/wordsize-64 -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I= ../libio -I. -D_LIBC_REENTRANT -include /srv/glibc/glibc-obj/libc-modules.= h -DMODULE_NAME=3Dtestsuite -include ../include/libc-symbols.h -DPIC -= DTOP_NAMESPACE=3Dglibc -o /srv/glibc/glibc-obj/debug/tst-fortify-cc-default= -1.o -MD -MP -MF /srv/glibc/glibc-obj/debug/tst-fortify-cc-default-1.o.dt -= MT /srv/glibc/glibc-obj/debug/tst-fortify-cc-default-1.o > In file included from ../include/sys/cdefs.h:10, > from ../include/features.h:490, > from ./tst-fortify.c:20, > from /srv/glibc/glibc-obj/debug/tst-fortify-cc-default-1= .cc:3: > ../misc/sys/cdefs.h:424:26: error: duplicate =E2=80=98inline=E2=80=99 > 424 | # define __always_inline __inline __attribute__ ((__always_inline= __)) > | ^~~~~~~~ > ../misc/sys/cdefs.h:453:10: note: in expansion of macro =E2=80=98__always= _inline=E2=80=99 > 453 | extern __always_inline __attribute__ ((__gnu_inline__)) > | ^~~~~~~~~~~~~~~ > ../misc/sys/cdefs.h:461:29: note: in expansion of macro =E2=80=98__extern= _always_inline=E2=80=99 > 461 | # define __fortify_function __extern_always_inline __attribute_ar= tificial__ > | ^~~~~~~~~~~~~~~~~~~~~~ > ../stdlib/bits/stdlib.h:116:17: note: in expansion of macro =E2=80=98__fo= rtify_function=E2=80=99 > 116 | __always_inline __fortify_function size_t > | ^~~~~~~~~~~~~~~~~~ > make[2]: *** [../o-iterator.mk:9: /srv/glibc/glibc-obj/debug/tst-fortify-= cc-default-1.o] Error 1 > > I am afraid I am a little lost in the macro expansions that cause the > duplicate inline here. > > Cheers, > > Mark > Seems the issue is the extra __always_inline: ``` diff --git a/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h index d9c2d822a5..de1c3b20f0 100644 --- a/stdlib/bits/stdlib.h +++ b/stdlib/bits/stdlib.h @@ -96,10 +96,10 @@ extern size_t __mbstowcs_chk (wchar_t *__restrict __dst= , const char *__restrict __src, size_t __len, size_t __dstlen) __THROW __attr_access ((__write_only__, 1, 3)) __attr_access ((__read_only__, = 2)); -extern size_t __REDIRECT_NTH (__mbstowcs_chk_nulldst, +extern size_t __REDIRECT_NTH (__mbstowcs_nulldst, (wchar_t *__restrict __dst, const char *__restrict __src, - size_t __len), mbstowcs_chk) + size_t __len), mbstowcs) __attr_access ((__read_only__, 2)); extern size_t __REDIRECT_NTH (__mbstowcs_alias, (wchar_t *__restrict __dst, @@ -113,12 +113,12 @@ extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn, __warnattr ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"); -__always_inline __fortify_function size_t +__fortify_function size_t __NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len)) { if (__builtin_constant_p (__dst =3D=3D NULL) && __dst =3D=3D NULL) - return __mbstowcs_chk_nulldst (__dst, __src, __len); + return __mbstowcs_nulldst (__dst, __src, __len); else return __glibc_fortify_n (mbstowcs, __len, sizeof (wchar_t), __glibc_objsize (__dst), __dst, __src, __len); ``` can you try this. I am totally unable to reproduce this but its obviously a= bug. What build flags are you using? Whatever I have is insufficient.