commit:     1d76aa204945dc2626c7bdd16144f3844c9e5480
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Aug 28 06:31:05 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Aug 28 06:37:13 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1d76aa20

dev-util/valgrind: backport two fixes (suppressions w/ new glibc, memcpy false 
positive)

1) Fix suppressions w/ >=glibc-2.34 (sort of >=glibc-2.38)

This might be a glibc-2.38 thing wrt why I started hitting it now but
I suspect it's actually because of 1f0fd3e2aee01e0c09e7103c8af4183b57faef49 
which
enabled ISA magic.

This breaks <glibc-2.34 in lieu of a proper upstream fix but those versions
are masked in Gentoo anyway.

2) Add a workaround (same as Fedora) for false positive "overlapping memcpy"
errors with _FORTIFY_SOURCE's memcpy_chk.

Bug: https://bugs.kde.org/show_bug.cgi?id=402833
Bug: https://bugs.kde.org/show_bug.cgi?id=453084
Bug: https://bugs.kde.org/show_bug.cgi?id=464671
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../valgrind-3.21.0-glibc-2.34-suppressions.patch  | 197 +++++++++++++++++++++
 .../valgrind-3.21.0-memcpy-fortify_source.patch    |  26 +++
 ...grind-9999.ebuild => valgrind-3.21.0-r2.ebuild} |   6 +-
 dev-util/valgrind/valgrind-9999.ebuild             |   2 +
 4 files changed, 228 insertions(+), 3 deletions(-)

diff --git 
a/dev-util/valgrind/files/valgrind-3.21.0-glibc-2.34-suppressions.patch 
b/dev-util/valgrind/files/valgrind-3.21.0-glibc-2.34-suppressions.patch
new file mode 100644
index 000000000000..c4111326cfa2
--- /dev/null
+++ b/dev-util/valgrind/files/valgrind-3.21.0-glibc-2.34-suppressions.patch
@@ -0,0 +1,197 @@
+commit e04914e10126d3a8de13302e958bbfd5e83a6637
+Author: Romain Geissler <[email protected]>
+Date:   Mon Jan 30 16:09:47 2023 +0000
+
+    Fragile temporary fix for https://bugs.kde.org/show_bug.cgi?id=464671: 
avoid using @GLIBC_VERSION@ with our recent toolchains.
+    
+    This is fragile as it might a bit too many things (especially ld*.so, 
which maybe shall be written "ld-linux-*.so" to be a bit more robust)
+    and also it doesn't work for glibc < 2.34.
+    
+    Ideally something similar to GLIBC_LIBC_PATH shall be introduced for ld.so 
and libdl.so, so that
+    it covers both glibc < 2.34 and glibc >= 2.34.
+
+--- a/glibc-2.X.supp.in
++++ b/glibc-2.X.supp.in
+@@ -39,74 +39,74 @@
+ {
+    dl-hack3-cond-1
+    Memcheck:Cond
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
+ }
+ {
+    dl-hack3-cond-2
+    Memcheck:Cond
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/libc-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
++   obj:@GLIBC_LIBC_PATH@
+ }
+ {
+    dl-hack3-cond-3
+    Memcheck:Cond
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/libc-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/libc-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so*
++   obj:@GLIBC_LIBC_PATH@
++   obj:@GLIBC_LIBC_PATH@
+ }
+ {
+    dl-hack3-cond-4
+    Memcheck:Cond
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/libdl-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
++   obj:@GLIBC_LIBC_PATH@
+ }
+ 
+ {
+    dl-hack4-64bit-addr-1
+    Memcheck:Addr8
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
+ }
+ {
+    dl-hack4-64bit-addr-2
+    Memcheck:Addr8
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/libc-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
++   obj:@GLIBC_LIBC_PATH@
+ }
+ {
+    dl-hack4-64bit-addr-3
+    Memcheck:Addr8
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/libdl-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so*
++   obj:*/lib*/ld*.so*
++   obj:@GLIBC_LIBC_PATH@
+ }
+ 
+ {
+    dl-hack5-32bit-addr-1
+    Memcheck:Addr4
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so
++   obj:*/lib*/ld*.so
++   obj:*/lib*/ld*.so
++   obj:*/lib*/ld*.so
+ }
+ {
+    dl-hack5-32bit-addr-3
+    Memcheck:Addr4
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so
+-   obj:*/lib*/libdl-@GLIBC_VERSION@*.so*
++   obj:*/lib*/ld*.so
++   obj:*/lib*/ld*.so
++   obj:@GLIBC_LIBC_PATH@
+ }
+ {
+    dl-hack5-32bit-addr-4
+    Memcheck:Addr4
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so
+-   obj:*/lib*/libdl-@GLIBC_VERSION@*.so*
+-   obj:*/lib*/ld-@GLIBC_VERSION@*.so
++   obj:*/lib*/ld*.so
++   obj:@GLIBC_LIBC_PATH@
++   obj:*/lib*/ld*.so
+ }
+ 
+ 
+@@ -124,7 +124,7 @@
+    glibc-2.5.x-on-SUSE-10.2-(PPC)-2a
+    Memcheck:Cond
+    fun:index
+-   obj:*ld-@GLIBC_VERSION@.*.so
++   obj:*/lib*/ld*.so*
+ }
+ {
+    glibc-2.5.x-on-SuSE-10.2-(PPC)-2b
+@@ -136,7 +136,7 @@
+    glibc-2.5.5-on-SuSE-10.2-(PPC)-2c
+    Memcheck:Addr4
+    fun:index
+-   obj:*ld-@GLIBC_VERSION@.*.so
++   obj:*/lib*/ld*.so*
+ }
+ {
+    glibc-2.3.5-on-SuSE-10.1-(PPC)-3
+@@ -149,9 +149,9 @@
+ {
+    glibc-@[email protected](x86)
+    Memcheck:Addr4
+-   obj:*/lib/ld-@GLIBC_VERSION@*.so
+-   obj:*/lib/ld-@GLIBC_VERSION@*.so
+-   obj:*/lib/ld-@GLIBC_VERSION@*.so
++   obj:*/lib/ld*.so
++   obj:*/lib/ld*.so
++   obj:*/lib/ld*.so
+ }
+ 
+ {
+@@ -168,9 +168,9 @@
+    Memcheck:Param
+    socketcall.sendto(msg)
+    fun:__sendto_nocancel
+-   obj:/*libc-@GLIBC_VERSION@*.so
+-   obj:/*libc-@GLIBC_VERSION@*.so
+-   obj:/*libc-@GLIBC_VERSION@*.so
++   obj:@GLIBC_LIBC_PATH@
++   obj:@GLIBC_LIBC_PATH@
++   obj:@GLIBC_LIBC_PATH@
+ }
+ {
+    glibc24-64bit-padding-1c
+@@ -180,7 +180,7 @@
+    fun:__nscd_get_map_ref
+    fun:nscd_get*_r
+    fun:*nscd*
+-   obj:/*libc-@GLIBC_VERSION@*.so
++   obj:@GLIBC_LIBC_PATH@
+ }
+ 
+ 
+@@ -199,18 +199,18 @@
+    Memcheck:Param
+    socketcall.sendto(msg)
+    fun:send
+-   obj:/*libc-@GLIBC_VERSION@*.so
+-   obj:/*libc-@GLIBC_VERSION@*.so
+-   obj:/*libc-@GLIBC_VERSION@*.so
++   obj:@GLIBC_LIBC_PATH@
++   obj:@GLIBC_LIBC_PATH@
++   obj:@GLIBC_LIBC_PATH@
+ }
+ {
+    X11-64bit-padding-4b
+    Memcheck:Param
+    socketcall.send(msg)
+    fun:send
+-   obj:/*libc-@GLIBC_VERSION@*.so
+-   obj:/*libc-@GLIBC_VERSION@*.so
+-   obj:/*libc-@GLIBC_VERSION@*.so
++   obj:@GLIBC_LIBC_PATH@
++   obj:@GLIBC_LIBC_PATH@
++   obj:@GLIBC_LIBC_PATH@
+ }
+ 
+ ##----------------------------------------------------------------------##

diff --git 
a/dev-util/valgrind/files/valgrind-3.21.0-memcpy-fortify_source.patch 
b/dev-util/valgrind/files/valgrind-3.21.0-memcpy-fortify_source.patch
new file mode 100644
index 000000000000..87acc9ff9f55
--- /dev/null
+++ b/dev-util/valgrind/files/valgrind-3.21.0-memcpy-fortify_source.patch
@@ -0,0 +1,26 @@
+Avoid false positives w/ overlapping memcpy args with _FORTIFY_SOURCE's
+memcpy_chk.
+
+https://src.fedoraproject.org/rpms/valgrind/raw/rawhide/f/valgrind-3.21.0-no-memcpy-replace-check.patch
+https://bugs.kde.org/show_bug.cgi?id=402833
+https://bugs.kde.org/show_bug.cgi?id=453084
+--- a/shared/vg_replace_strmem.c
++++ b/shared/vg_replace_strmem.c
+@@ -1128,7 +1128,7 @@ static inline void my_exit ( int x )
+    MEMMOVE_OR_MEMCPY(20181, soname, fnname, 0)
+ 
+ #define MEMCPY(soname, fnname) \
+-   MEMMOVE_OR_MEMCPY(20180, soname, fnname, 1)
++   MEMMOVE_OR_MEMCPY(20180, soname, fnname, 0) /* See KDE bug #402833 */
+ 
+ #if defined(VGO_linux)
+  /* For older memcpy we have to use memmove-like semantics and skip
+@@ -1714,8 +1714,6 @@ static inline void my_exit ( int x )
+       RECORD_COPY(len); \
+       if (len == 0) \
+          return dst; \
+-      if (is_overlap(dst, src, len, len)) \
+-         RECORD_OVERLAP_ERROR("memcpy_chk", dst, src, len); \
+       if ( dst > src ) { \
+          d = (HChar *)dst + len - 1; \
+          s = (const HChar *)src + len - 1; \

diff --git a/dev-util/valgrind/valgrind-9999.ebuild 
b/dev-util/valgrind/valgrind-3.21.0-r2.ebuild
similarity index 96%
copy from dev-util/valgrind/valgrind-9999.ebuild
copy to dev-util/valgrind/valgrind-3.21.0-r2.ebuild
index a32a0da1588d..8a4f5d8f4003 100644
--- a/dev-util/valgrind/valgrind-9999.ebuild
+++ b/dev-util/valgrind/valgrind-3.21.0-r2.ebuild
@@ -32,6 +32,8 @@ PATCHES=(
        # Respect CFLAGS, LDFLAGS
        "${FILESDIR}"/${PN}-3.7.0-respect-flags.patch
        "${FILESDIR}"/${PN}-3.15.0-Build-ldst_multiple-test-with-fno-pie.patch
+       "${FILESDIR}"/${PN}-3.21.0-glibc-2.34-suppressions.patch
+       "${FILESDIR}"/${PN}-3.21.0-memcpy-fortify_source.patch
 )
 
 src_prepare() {
@@ -57,9 +59,7 @@ src_prepare() {
 }
 
 src_configure() {
-       local myconf=(
-               --with-gdbscripts-dir="${EPREFIX}"/usr/share/gdb/auto-load
-       )
+       local myconf=()
 
        # Respect ar, bug #468114
        tc-export AR

diff --git a/dev-util/valgrind/valgrind-9999.ebuild 
b/dev-util/valgrind/valgrind-9999.ebuild
index a32a0da1588d..c1a57f63331b 100644
--- a/dev-util/valgrind/valgrind-9999.ebuild
+++ b/dev-util/valgrind/valgrind-9999.ebuild
@@ -32,6 +32,8 @@ PATCHES=(
        # Respect CFLAGS, LDFLAGS
        "${FILESDIR}"/${PN}-3.7.0-respect-flags.patch
        "${FILESDIR}"/${PN}-3.15.0-Build-ldst_multiple-test-with-fno-pie.patch
+       "${FILESDIR}"/${PN}-3.21.0-glibc-2.34-suppressions.patch
+       "${FILESDIR}"/${PN}-3.21.0-memcpy-fortify_source.patch
 )
 
 src_prepare() {

Reply via email to