Commit 6ff92497 by Martin Liska Committed by Martin Liska

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
parent 6438c2f4
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) ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment