diff options
author | Naveen <naveen.gowda@windriver.com> | 2022-07-20 14:50:03 +0530 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-08-01 16:27:30 +0100 |
commit | 35b74ace9ce8cdb9bf749c87fa757d7579c03242 (patch) | |
tree | 2745d10816f5d278045ea81a8afceeae499c87bb /meta | |
parent | ba0c2df27e77784bc651bd09084f9c6f4eba2ba5 (diff) | |
download | poky-35b74ace9ce8cdb9bf749c87fa757d7579c03242.tar.gz |
gcc: Backport a fix for gcc bug 105039
Backport a fix from:
https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=9234cdca6ee88badfc00297e72f13dac4e540c79
which fixes rust recursion issues in the demangler.
(From OE-Core rev: 943760dfb8036bd2f5e075bf0696f820fd6dc79d)
Signed-off-by: Naveen <naveen.gowda@windriver.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-11.3.inc | 2 | ||||
-rw-r--r-- | meta/recipes-devtools/gcc/gcc/0030-rust-recursion-limit.patch | 92 |
2 files changed, 93 insertions, 1 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-11.3.inc b/meta/recipes-devtools/gcc/gcc-11.3.inc index acbb43a25f..2cebeb2bc8 100644 --- a/meta/recipes-devtools/gcc/gcc-11.3.inc +++ b/meta/recipes-devtools/gcc/gcc-11.3.inc | |||
@@ -59,7 +59,7 @@ SRC_URI = "\ | |||
59 | file://0027-libatomic-Do-not-enforce-march-on-aarch64.patch \ | 59 | file://0027-libatomic-Do-not-enforce-march-on-aarch64.patch \ |
60 | file://0028-debug-101473-apply-debug-prefix-maps-before-checksum.patch \ | 60 | file://0028-debug-101473-apply-debug-prefix-maps-before-checksum.patch \ |
61 | file://0029-Fix-install-path-of-linux64.h.patch \ | 61 | file://0029-Fix-install-path-of-linux64.h.patch \ |
62 | \ | 62 | file://0030-rust-recursion-limit.patch \ |
63 | file://0001-CVE-2021-42574.patch \ | 63 | file://0001-CVE-2021-42574.patch \ |
64 | file://0002-CVE-2021-42574.patch \ | 64 | file://0002-CVE-2021-42574.patch \ |
65 | file://0003-CVE-2021-42574.patch \ | 65 | file://0003-CVE-2021-42574.patch \ |
diff --git a/meta/recipes-devtools/gcc/gcc/0030-rust-recursion-limit.patch b/meta/recipes-devtools/gcc/gcc/0030-rust-recursion-limit.patch new file mode 100644 index 0000000000..bbe2f18f6f --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc/0030-rust-recursion-limit.patch | |||
@@ -0,0 +1,92 @@ | |||
1 | From 9234cdca6ee88badfc00297e72f13dac4e540c79 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nick Clifton <nickc@redhat.com> | ||
3 | Date: Fri, 1 Jul 2022 15:58:52 +0100 | ||
4 | Subject: [PATCH] Add a recursion limit to the demangle_const function in the | ||
5 | Rust demangler. | ||
6 | |||
7 | libiberty/ | ||
8 | PR demangler/105039 | ||
9 | * rust-demangle.c (demangle_const): Add recursion limit. | ||
10 | |||
11 | Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=9234cdca6ee88badfc00297e72f13dac4e540c79] | ||
12 | --- | ||
13 | libiberty/rust-demangle.c | 29 ++++++++++++++++++++--------- | ||
14 | 1 file changed, 20 insertions(+), 9 deletions(-) | ||
15 | |||
16 | diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c | ||
17 | index bb58d900e27..36afcfae278 100644 | ||
18 | --- a/libiberty/rust-demangle.c | ||
19 | +++ b/libiberty/rust-demangle.c | ||
20 | @@ -126,7 +126,7 @@ parse_integer_62 (struct rust_demangler *rdm) | ||
21 | return 0; | ||
22 | |||
23 | x = 0; | ||
24 | - while (!eat (rdm, '_')) | ||
25 | + while (!eat (rdm, '_') && !rdm->errored) | ||
26 | { | ||
27 | c = next (rdm); | ||
28 | x *= 62; | ||
29 | @@ -1148,6 +1148,15 @@ demangle_const (struct rust_demangler *rdm) | ||
30 | if (rdm->errored) | ||
31 | return; | ||
32 | |||
33 | + if (rdm->recursion != RUST_NO_RECURSION_LIMIT) | ||
34 | + { | ||
35 | + ++ rdm->recursion; | ||
36 | + if (rdm->recursion > RUST_MAX_RECURSION_COUNT) | ||
37 | + /* FIXME: There ought to be a way to report | ||
38 | + that the recursion limit has been reached. */ | ||
39 | + goto fail_return; | ||
40 | + } | ||
41 | + | ||
42 | if (eat (rdm, 'B')) | ||
43 | { | ||
44 | backref = parse_integer_62 (rdm); | ||
45 | @@ -1158,7 +1167,7 @@ demangle_const (struct rust_demangler *rdm) | ||
46 | demangle_const (rdm); | ||
47 | rdm->next = old_next; | ||
48 | } | ||
49 | - return; | ||
50 | + goto pass_return; | ||
51 | } | ||
52 | |||
53 | ty_tag = next (rdm); | ||
54 | @@ -1167,7 +1176,7 @@ demangle_const (struct rust_demangler *rdm) | ||
55 | /* Placeholder. */ | ||
56 | case 'p': | ||
57 | PRINT ("_"); | ||
58 | - return; | ||
59 | + goto pass_return; | ||
60 | |||
61 | /* Unsigned integer types. */ | ||
62 | case 'h': | ||
63 | @@ -1200,18 +1209,20 @@ demangle_const (struct rust_demangler *rdm) | ||
64 | break; | ||
65 | |||
66 | default: | ||
67 | - rdm->errored = 1; | ||
68 | - return; | ||
69 | + goto fail_return; | ||
70 | } | ||
71 | |||
72 | - if (rdm->errored) | ||
73 | - return; | ||
74 | - | ||
75 | - if (rdm->verbose) | ||
76 | + if (!rdm->errored && rdm->verbose) | ||
77 | { | ||
78 | PRINT (": "); | ||
79 | PRINT (basic_type (ty_tag)); | ||
80 | } | ||
81 | + | ||
82 | + fail_return: | ||
83 | + rdm->errored = 1; | ||
84 | + pass_return: | ||
85 | + if (rdm->recursion != RUST_NO_RECURSION_LIMIT) | ||
86 | + -- rdm->recursion; | ||
87 | } | ||
88 | |||
89 | static void | ||
90 | -- | ||
91 | 2.31.1 | ||
92 | |||