mirror of git://gcc.gnu.org/git/gcc.git
Do not sanitize in an abnormal context (PR sanitizer/78815).
2017-01-05 Martin Liska <mliska@suse.cz> PR sanitizer/78815 * gimplify.c (gimplify_decl_expr): Compare to asan_poisoned_variables instread of checking flags. (gimplify_target_expr): Likewise. (gimplify_expr): Likewise. (gimplify_function_tree): Conditionally initialize asan_poisoned_variables. From-SVN: r244095
This commit is contained in:
parent
6438c2f40f
commit
6ff9249717
|
|
@ -1,3 +1,13 @@
|
||||||
|
2017-01-05 Martin Liska <mliska@suse.cz>
|
||||||
|
|
||||||
|
PR sanitizer/78815
|
||||||
|
* gimplify.c (gimplify_decl_expr): Compare to
|
||||||
|
asan_poisoned_variables instread of checking flags.
|
||||||
|
(gimplify_target_expr): Likewise.
|
||||||
|
(gimplify_expr): Likewise.
|
||||||
|
(gimplify_function_tree): Conditionally initialize
|
||||||
|
asan_poisoned_variables.
|
||||||
|
|
||||||
2017-01-04 Jeff Law <law@redhat.com>
|
2017-01-04 Jeff Law <law@redhat.com>
|
||||||
|
|
||||||
PR tree-optimizatin/78812
|
PR tree-optimizatin/78812
|
||||||
|
|
|
||||||
|
|
@ -1620,8 +1620,7 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
|
||||||
is_vla = true;
|
is_vla = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (asan_sanitize_use_after_scope ()
|
if (asan_poisoned_variables
|
||||||
&& !asan_no_sanitize_address_p ()
|
|
||||||
&& !is_vla
|
&& !is_vla
|
||||||
&& TREE_ADDRESSABLE (decl)
|
&& TREE_ADDRESSABLE (decl)
|
||||||
&& !TREE_STATIC (decl)
|
&& !TREE_STATIC (decl)
|
||||||
|
|
@ -6413,8 +6412,7 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
|
||||||
else
|
else
|
||||||
cleanup = clobber;
|
cleanup = clobber;
|
||||||
}
|
}
|
||||||
if (asan_sanitize_use_after_scope ()
|
if (asan_poisoned_variables && dbg_cnt (asan_use_after_scope))
|
||||||
&& dbg_cnt (asan_use_after_scope))
|
|
||||||
{
|
{
|
||||||
tree asan_cleanup = build_asan_poison_call_expr (temp);
|
tree asan_cleanup = build_asan_poison_call_expr (temp);
|
||||||
if (asan_cleanup)
|
if (asan_cleanup)
|
||||||
|
|
@ -11426,7 +11424,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
|
||||||
/* If the label is used in a goto statement, or address of the label
|
/* If the label is used in a goto statement, or address of the label
|
||||||
is taken, we need to unpoison all variables that were seen so far.
|
is taken, we need to unpoison all variables that were seen so far.
|
||||||
Doing so would prevent us from reporting a false positives. */
|
Doing so would prevent us from reporting a false positives. */
|
||||||
if (asan_sanitize_use_after_scope ()
|
if (asan_poisoned_variables
|
||||||
&& asan_used_labels != NULL
|
&& asan_used_labels != NULL
|
||||||
&& asan_used_labels->contains (label))
|
&& asan_used_labels->contains (label))
|
||||||
asan_poison_variables (asan_poisoned_variables, false, pre_p);
|
asan_poison_variables (asan_poisoned_variables, false, pre_p);
|
||||||
|
|
@ -12531,10 +12529,14 @@ gimplify_function_tree (tree fndecl)
|
||||||
&& !needs_to_live_in_memory (ret))
|
&& !needs_to_live_in_memory (ret))
|
||||||
DECL_GIMPLE_REG_P (ret) = 1;
|
DECL_GIMPLE_REG_P (ret) = 1;
|
||||||
|
|
||||||
asan_poisoned_variables = new hash_set<tree> ();
|
if (asan_sanitize_use_after_scope () && !asan_no_sanitize_address_p ())
|
||||||
|
asan_poisoned_variables = new hash_set<tree> ();
|
||||||
bind = gimplify_body (fndecl, true);
|
bind = gimplify_body (fndecl, true);
|
||||||
delete asan_poisoned_variables;
|
if (asan_poisoned_variables)
|
||||||
asan_poisoned_variables = NULL;
|
{
|
||||||
|
delete asan_poisoned_variables;
|
||||||
|
asan_poisoned_variables = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* The tree body of the function is no longer needed, replace it
|
/* The tree body of the function is no longer needed, replace it
|
||||||
with the new GIMPLE body. */
|
with the new GIMPLE body. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue