aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2015-12-11 11:59:29 +0100
committerMartin Liska <marxin@gcc.gnu.org>2015-12-11 10:59:29 +0000
commit11b9b5a445074aaef7a8b8961dcfb62f79168777 (patch)
treec0bda674661a5edf5e061a135eba1ef5c6f68292
parent9276b0f797b13924a5bc05d150cdb12efec515d6 (diff)
downloadgcc-11b9b5a445074aaef7a8b8961dcfb62f79168777.zip
gcc-11b9b5a445074aaef7a8b8961dcfb62f79168777.tar.gz
gcc-11b9b5a445074aaef7a8b8961dcfb62f79168777.tar.bz2
re PR target/67484 (options-save.c sanitizer asan detects freed storage referenced heap-use-after-free)
Fix PR target/67484 Uros Bizjak <ubizjak@gmail.com> PR target/67484 * config/i386/i386.c (ix86_valid_target_attribute_tree): Use ggc_strdup to copy option_strings to opts->x_ix86_arch_string and opts->x_ix86_tune_string. From-SVN: r231556
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.c5
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c150e00..de877d4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2015-12-11 Martin Liska <mliska@suse.cz>
+
+ Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/67484
+ * config/i386/i386.c (ix86_valid_target_attribute_tree):
+ Use ggc_strdup to copy option_strings to opts->x_ix86_arch_string and
+ opts->x_ix86_tune_string.
+
2015-12-11 Richard Biener <rguenther@suse.de>
* lto-streamer.h (lto_simple_header_with_strings): Remove
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index e565c0b..cecea24 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6152,7 +6152,7 @@ ix86_valid_target_attribute_tree (tree args,
if (option_strings[IX86_FUNCTION_SPECIFIC_ARCH])
{
opts->x_ix86_arch_string
- = option_strings[IX86_FUNCTION_SPECIFIC_ARCH];
+ = ggc_strdup (option_strings[IX86_FUNCTION_SPECIFIC_ARCH]);
/* If arch= is set, clear all bits in x_ix86_isa_flags,
except for ISA_64BIT, ABI_64, ABI_X32, and CODE16. */
@@ -6166,7 +6166,8 @@ ix86_valid_target_attribute_tree (tree args,
opts->x_ix86_arch_string = NULL;
if (option_strings[IX86_FUNCTION_SPECIFIC_TUNE])
- opts->x_ix86_tune_string = option_strings[IX86_FUNCTION_SPECIFIC_TUNE];
+ opts->x_ix86_tune_string
+ = ggc_strdup (option_strings[IX86_FUNCTION_SPECIFIC_TUNE]);
else if (orig_tune_defaulted)
opts->x_ix86_tune_string = NULL;