diff --git a/SOURCES/_gdb.spec.Patch.include b/SOURCES/_gdb.spec.Patch.include index 3c93a0a..c69b87a 100644 --- a/SOURCES/_gdb.spec.Patch.include +++ b/SOURCES/_gdb.spec.Patch.include @@ -293,3 +293,14 @@ Patch068: gdb-backport-call-check_typedef-at-beginning-of-dwarf_expr_context.pat # (Nick Clifton, RHBZ 2153228) Patch069: gdb-rhbz2153228-fail-if-sh_info-is-zero.patch +# Backport Add a recursion limit to the demangle_const function in the Rust demangler. +# (Nick Clifton, RHEL-4234) +Patch070: libiberty-infinite-recursion-fix-1-of-2.patch + +# Backport Fix typo in recent code to add stack recursion limit to the Rust demangler. +# (Nick Clifton) +Patch071: libiberty-infinite-recursion-fix-2-of-2.patch + + +Patch072: libiberty-infinite-recursion-fix-3-of-3.patch + diff --git a/SOURCES/_gdb.spec.patch.include b/SOURCES/_gdb.spec.patch.include index 4ef8e6c..b02efe8 100644 --- a/SOURCES/_gdb.spec.patch.include +++ b/SOURCES/_gdb.spec.patch.include @@ -67,3 +67,6 @@ %patch067 -p1 %patch068 -p1 %patch069 -p1 +%patch070 -p1 +%patch071 -p1 +%patch072 -p1 diff --git a/SOURCES/libiberty-infinite-recursion-fix-1-of-2.patch b/SOURCES/libiberty-infinite-recursion-fix-1-of-2.patch new file mode 100644 index 0000000..4acf718 --- /dev/null +++ b/SOURCES/libiberty-infinite-recursion-fix-1-of-2.patch @@ -0,0 +1,85 @@ +From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 +From: Nick Clifton +Date: Fri, 1 Jul 2022 15:58:52 +0100 +Subject: libiberty-infinite-recursion-fix-1-of-2.patch + +;; Backport Add a recursion limit to the demangle_const function in the Rust demangler. +;; (Nick Clifton, RHEL-4234) + +libiberty/ + PR demangler/105039 + * rust-demangle.c (demangle_const): Add recursion limit. + +diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c +--- a/libiberty/rust-demangle.c ++++ b/libiberty/rust-demangle.c +@@ -126,7 +126,7 @@ parse_integer_62 (struct rust_demangler *rdm) + return 0; + + x = 0; +- while (!eat (rdm, '_')) ++ while (!eat (rdm, '_') && !rdm->errored) + { + c = next (rdm); + x *= 62; +@@ -1148,6 +1148,15 @@ demangle_const (struct rust_demangler *rdm) + if (rdm->errored) + return; + ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ { ++ ++ rdm->recursion; ++ if (rdm->recursion > RUST_MAX_RECURSION_COUNT) ++ /* FIXME: There ought to be a way to report ++ that the recursion limit has been reached. */ ++ goto fail_return; ++ } ++ + if (eat (rdm, 'B')) + { + backref = parse_integer_62 (rdm); +@@ -1158,7 +1167,7 @@ demangle_const (struct rust_demangler *rdm) + demangle_const (rdm); + rdm->next = old_next; + } +- return; ++ goto pass_return; + } + + ty_tag = next (rdm); +@@ -1167,7 +1176,7 @@ demangle_const (struct rust_demangler *rdm) + /* Placeholder. */ + case 'p': + PRINT ("_"); +- return; ++ goto pass_return; + + /* Unsigned integer types. */ + case 'h': +@@ -1200,18 +1209,20 @@ demangle_const (struct rust_demangler *rdm) + break; + + default: +- rdm->errored = 1; +- return; ++ goto fail_return; + } + +- if (rdm->errored) +- return; +- +- if (rdm->verbose) ++ if (!rdm->errored && rdm->verbose) + { + PRINT (": "); + PRINT (basic_type (ty_tag)); + } ++ ++ fail_return: ++ rdm->errored = 1; ++ pass_return: ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ -- rdm->recursion; + } + + static void diff --git a/SOURCES/libiberty-infinite-recursion-fix-2-of-2.patch b/SOURCES/libiberty-infinite-recursion-fix-2-of-2.patch new file mode 100644 index 0000000..91deb76 --- /dev/null +++ b/SOURCES/libiberty-infinite-recursion-fix-2-of-2.patch @@ -0,0 +1,23 @@ +From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 +From: Nick Clifton +Date: Mon, 4 Jul 2022 16:31:18 +0100 +Subject: libiberty-infinite-recursion-fix-2-of-2.patch + +;; Backport Fix typo in recent code to add stack recursion limit to the Rust demangler. +;; (Nick Clifton) + +libiberty + * rust-demangle.c (demangle_const): Add a missing goto pass_return + at the end of the function. + +diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c +--- a/libiberty/rust-demangle.c ++++ b/libiberty/rust-demangle.c +@@ -1217,6 +1217,7 @@ demangle_const (struct rust_demangler *rdm) + PRINT (": "); + PRINT (basic_type (ty_tag)); + } ++ goto pass_return; + + fail_return: + rdm->errored = 1; diff --git a/SOURCES/libiberty-infinite-recursion-fix-3-of-3.patch b/SOURCES/libiberty-infinite-recursion-fix-3-of-3.patch new file mode 100644 index 0000000..9296677 --- /dev/null +++ b/SOURCES/libiberty-infinite-recursion-fix-3-of-3.patch @@ -0,0 +1,40 @@ +From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 +From: Guinevere Larsen +Date: Mon, 30 Oct 2023 12:48:01 +0100 +Subject: libiberty-infinite-recursion-fix-3-of-3.patch + +fix backport error in patch 1 of this series. + +diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c +--- a/libiberty/rust-demangle.c ++++ b/libiberty/rust-demangle.c +@@ -1082,6 +1082,18 @@ demangle_path_maybe_open_generics (struct rust_demangler *rdm) + if (rdm->errored) + return open; + ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ { ++ ++ rdm ->recursion; ++ if (rdm->recursion > RUST_MAX_RECURSION_COUNT) ++ { ++ /* FIXME: there ought to be a way to report ++ that the recorsion limit has been reached. */ ++ rdm->errored = 1; ++ goto end_of_func; ++ } ++ } ++ + if (eat (rdm, 'B')) + { + backref = parse_integer_62 (rdm); +@@ -1107,6 +1119,10 @@ demangle_path_maybe_open_generics (struct rust_demangler *rdm) + } + else + demangle_path (rdm, 0); ++ end_of_func: ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ -- rdm->recursion; ++ + return open; + } + diff --git a/SPECS/gdb.spec b/SPECS/gdb.spec index e616366..b5778ce 100644 --- a/SPECS/gdb.spec +++ b/SPECS/gdb.spec @@ -11,10 +11,14 @@ # Turn off the brp-python-bytecompile automagic %global _python_bytecompile_extra 0 -# GTS magic sauce. +# GTS magic sauce. On GTS N (N >= 13), we always build using +# the system compiler and elfutils. +# +# For testing, we use the GTS (N-1) compiler and the system valgrind/elfutils. + %{?scl_package:%global scl gcc-toolset-13} %global scl_prefix gcc-toolset-13- -%global scl_testing_prefix gcc-toolset-12- +%global scl_testing_cc_prefix gcc-toolset-12- BuildRequires: scl-utils-build # Only build on x86 for RHEL6 SCL, defining missing parallel make macros. @@ -69,7 +73,7 @@ Version: 12.1 # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. -Release: 3%{?dist} +Release: 5%{?dist} License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and LGPLv3+ and BSD and Public Domain and GFDL # Do not provide URL for snapshots as the file lasts there only for 2 days. @@ -318,7 +322,7 @@ BuildRequires: elfutils-debuginfod-client-devel %if 0%{!?el6:1} && 0%{?scl:1} %global have_debuginfod 1 %global use_scl_for_debuginfod 1 -BuildRequires: %{?scl_prefix}elfutils-debuginfod-client-devel +BuildRequires: elfutils-debuginfod-client-devel %endif %endif @@ -347,14 +351,14 @@ BuildRequires: boost-devel BuildRequires: sharutils dejagnu # gcc-objc++ is not covered by the GDB testsuite. # Test supported SCL toolchain components. -BuildRequires: %{?scl_testing_prefix}gcc %{?scl_testing_prefix}gcc-c++ %{?scl_testing_prefix}gcc-gfortran +BuildRequires: %{?scl_testing_cc_prefix}gcc %{?scl_testing_cc_prefix}gcc-c++ %{?scl_testing_cc_prefix}gcc-gfortran %if 0%{!?rhel:1} || 0%{?rhel} < 8 BuildRequires: gcc-objc %endif # We don't support gcc-gdb-plugin on RHEL anymore. %if 0%{!?rhel:1} -BuildRequires: %{?scl_testing_prefix}gcc-gdb-plugin%{?_isa} +BuildRequires: gcc-gdb-plugin%{?_isa} %endif %if 0%{?rhel:1} && 0%{?rhel} < 7 BuildRequires: gcc-java libgcj%{bits_local} libgcj%{bits_other} @@ -424,12 +428,12 @@ BuildRequires: libquadmath%{bits_local} libquadmath%{bits_other} BuildRequires: glibc-static%{bits_other} %endif %ifarch s390x -BuildRequires: %{?scl_testing_preifx}valgrind%{bits_local} +BuildRequires: valgrind%{bits_local} %if 0%{!?rhel:1} || 0%{?rhel} > 7 -BuildRequires: %{?scl_testing_prefix}valgrind%{bits_local} valgrind%{bits_other} +BuildRequires: valgrind%{bits_local} valgrind%{bits_other} %endif %else -BuildRequires: %{?scl_testing_prefix}valgrind%{bits_local} valgrind%{bits_other} +BuildRequires: valgrind%{bits_local} valgrind%{bits_other} %endif %if 0%{!?rhel:1} || 0%{?rhel} > 6 BuildRequires: xz @@ -438,7 +442,7 @@ BuildRequires: xz BuildRequires: rust %endif %if 0%{!?el6:1} -BuildRequires: %{?scl_testing_prefix}elfutils-debuginfod +BuildRequires: elfutils-debuginfod %endif %endif # 0%{?_with_testsuite:1} BuildRequires: make gmp-devel @@ -1201,7 +1205,16 @@ fi %endif %changelog -* Fri Sep 22 2023 MSVSphere Packaging Team - 12.1-3 +* Mon Oct 30 2023 Guinevere Larsen - 12.1-5.el9 +- Fix issue introduced when backporting the recursion limit to the rust demangler. + +* Tue Oct 10 2023 Guinevere Larsen - 12.1-4.el9 +- Backport "Fix typo in recent code to add stack recursion limit to the Rust demangler." + (Nick Clifton) +- Backport "Add a recursion limit to the demangle_const function in the Rust demangler." + (Nick Clifton, RHEL-4234) + +* Fri Sep 22 2023 MSVSphere Packaging Team - 12.1-3.el9 - Rebuilt for MSVSphere 9.3 beta * Tue Jun 13 2023 Keith Seitz - 12.1-3.el9