[Bug,libc/29141] _FORTIFY_SOURCE=3 fail for gcc 12/glibc 2.35

Message ID bug-29141-10460-5yUM33OGEv@http.sourceware.org/bugzilla/
State Dropped
Headers
Series [Bug,libc/29141] _FORTIFY_SOURCE=3 fail for gcc 12/glibc 2.35 |

Commit Message

dichen at redhat dot com May 13, 2022, 4:02 a.m. UTC
  https://sourceware.org/bugzilla/show_bug.cgi?id=29141

--- Comment #6 from Siddhesh Poyarekar <siddhesh at sourceware dot org> ---
(In reply to Petr Ovtchenkov from comment #5)
> Hmm. c8ee1c8 not correspond to diff you show above.

Ah, sorry no, they're two different things that I formatted very badly making
it seem like it's one thing.  The commit that introduced the regression:

commit c8ee1c85c07b3c9eaef46355cb1095300855e8fa
Author: Joan Bruguera <joanbrugueram@gmail.com>
Date:   Mon Apr 11 19:49:56 2022 +0200

    misc: Fix rare fortify crash on wchar funcs. [BZ 29030]

and then the one line fix for it that I'm about to post:

                                                       (__s), (__osz)))       \
  

Patch

diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index f1faf8292c..1c2b044a0d 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -164,7 +164,7 @@ 
 /* Length is known to be safe at compile time if the __L * __S <= __OBJSZ
    condition can be folded to a constant and if it is true, or unknown (-1) */
 #define __glibc_safe_or_unknown_len(__l, __s, __osz) \
-  ((__osz) == (__SIZE_TYPE__) -1                                             \
+  ((__builtin_constant_p (__osz) && (__osz) == (__SIZE_TYPE__) -1)           \
    || (__glibc_unsigned_or_positive (__l)                                    \
        && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l),
\