diff --git a/_gdb.spec.Patch.include b/_gdb.spec.Patch.include index c88f10b..a5eb526 100644 --- a/_gdb.spec.Patch.include +++ b/_gdb.spec.Patch.include @@ -293,3 +293,13 @@ Patch068: gdb-backport-call-check_typedef-at-beginning-of-dwarf_expr_context.pat # (Nick Clifton, RHBZ 2153227) Patch069: gdb-rhbz2153227-fail-if-sh_info-is-zero.patch +# Backport "Add a recursion limit to the demangle_const function +# in the Rust demangler." +# (Nick Clifton, RHEL-4237) +Patch070: gdb-rhel-4237-rust-demangler-recursion-limit-1of2.patch + +# Backport "Fix typo in recent code to add stack recursion limit to +# the Rust demangler." +# (Nick Clifton, RHEL-4327) +Patch071: gdb-rhel-4237-rust-demangler-recursion-limit-2of2.patch + diff --git a/_gdb.spec.patch.include b/_gdb.spec.patch.include index 4ef8e6c..56e7473 100644 --- a/_gdb.spec.patch.include +++ b/_gdb.spec.patch.include @@ -67,3 +67,5 @@ %patch067 -p1 %patch068 -p1 %patch069 -p1 +%patch070 -p1 +%patch071 -p1 diff --git a/_patch_order b/_patch_order index b9a0ad8..1007d43 100644 --- a/_patch_order +++ b/_patch_order @@ -67,3 +67,5 @@ gdb-backport-python-config-replace-deprecated-distutils.patch gdb-gcc-13-backport-self-move-diagnostic-fix gdb-backport-call-check_typedef-at-beginning-of-dwarf_expr_context.patch gdb-rhbz2153227-fail-if-sh_info-is-zero.patch +gdb-rhel-4237-rust-demangler-recursion-limit-1of2.patch +gdb-rhel-4237-rust-demangler-recursion-limit-2of2.patch diff --git a/gdb-rhel-4237-rust-demangler-recursion-limit-1of2.patch b/gdb-rhel-4237-rust-demangler-recursion-limit-1of2.patch new file mode 100644 index 0000000..036ac45 --- /dev/null +++ b/gdb-rhel-4237-rust-demangler-recursion-limit-1of2.patch @@ -0,0 +1,117 @@ +From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 +From: Keith Seitz +Date: Thu, 12 Oct 2023 15:03:51 -0400 +Subject: gdb-rhel-4237-rust-demangler-recursion-limit-1of2.patch + +;; Backport "Add a recursion limit to the demangle_const function +;; in the Rust demangler." +;; (Nick Clifton, RHEL-4237) + +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; +@@ -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 recursion limit has been reached. */ ++ rdm->errored = 1; ++ goto end_of_func; ++ } ++ } ++ + if (eat (rdm, 'B')) + { + backref = parse_integer_62 (rdm); +@@ -1107,6 +1119,11 @@ 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; + } + +@@ -1148,6 +1165,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 +1184,7 @@ demangle_const (struct rust_demangler *rdm) + demangle_const (rdm); + rdm->next = old_next; + } +- return; ++ goto pass_return; + } + + ty_tag = next (rdm); +@@ -1167,7 +1193,7 @@ demangle_const (struct rust_demangler *rdm) + /* Placeholder. */ + case 'p': + PRINT ("_"); +- return; ++ goto pass_return; + + /* Unsigned integer types. */ + case 'h': +@@ -1200,18 +1226,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/gdb-rhel-4237-rust-demangler-recursion-limit-2of2.patch b/gdb-rhel-4237-rust-demangler-recursion-limit-2of2.patch new file mode 100644 index 0000000..9529fb4 --- /dev/null +++ b/gdb-rhel-4237-rust-demangler-recursion-limit-2of2.patch @@ -0,0 +1,26 @@ +From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 +From: Keith Seitz +Date: Thu, 12 Oct 2023 15:16:40 -0400 +Subject: gdb-rhel-4237-rust-demangler-recursion-limit-2of2.patch + +;; Backport "Fix typo in recent code to add stack recursion limit to +;; the Rust demangler." +;; (Nick Clifton, RHEL-4327) + + Fix typo in recent code to add stack recursion limit to the Rust demangler. + +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 +@@ -1234,6 +1234,7 @@ demangle_const (struct rust_demangler *rdm) + PRINT (": "); + PRINT (basic_type (ty_tag)); + } ++ goto pass_return; + + fail_return: + rdm->errored = 1; diff --git a/gdb.spec b/gdb.spec index d313c62..14fd810 100644 --- a/gdb.spec +++ b/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: 4%{?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,6 +1205,11 @@ fi %endif %changelog +* Thu Oct 12 2023 Keith Seitz - 12.1-4.el8 +- Backport "Add a recursion limit to the demangle_const function + in the Rust demangler." + (Nick Clifton, RHEL-4237) + * Tue Jun 13 2023 Keith Seitz - 12.1-3.el8 - Backport "Update gdb-add-index.sh ..." (Andrew Burgess, RHBZ 2214593)