diff mbox

Do not sanitize in lower_omp_target context (PR, sanitizer/78815).

Message ID cfcd9d95-8e06-48be-3469-2bfa71310ef1@suse.cz
State New
Headers show

Commit Message

Martin Liška Dec. 16, 2016, 12:04 p.m. UTC
Currently, use-after-scope relies on fact that entry point of gimplify_decl_expr
is gimplify_function_tree. Fixed by checking if asan_poisoned_variables is non-null.

Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.

Ready to be installed?
Martin

Comments

Martin Liška Jan. 4, 2017, 9:19 a.m. UTC | #1
PING^1

On 12/16/2016 01:04 PM, Martin Liška wrote:
> Currently, use-after-scope relies on fact that entry point of gimplify_decl_expr

> is gimplify_function_tree. Fixed by checking if asan_poisoned_variables is non-null.

> 

> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.

> 

> Ready to be installed?

> Martin

>
Jakub Jelinek Jan. 4, 2017, 9:31 a.m. UTC | #2
On Wed, Jan 04, 2017 at 10:19:28AM +0100, Martin Liška wrote:
> PING^1

> 

> On 12/16/2016 01:04 PM, Martin Liška wrote:

> > Currently, use-after-scope relies on fact that entry point of gimplify_decl_expr

> > is gimplify_function_tree. Fixed by checking if asan_poisoned_variables is non-null.

> > 

> > Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.

> > 

> > Ready to be installed?


Looking at asan_poisoned_variables, my preference would be to guard:
  asan_poisoned_variables = new hash_set<tree> ();
with
if (asan_sanitize_use_after_scope ()
    && !asan_no_sanitize_address_p ())
the delete asan_poisoned_variables; with if (asan_poisoned_variables)
and all the poisoning stuff in the gimplifier also with if
(asan_poisoned_variables) and no need to repeat there the asan_sanitize_use_after_scope
() and !asan_no_sanitize_address_p () tests.
      if (asan_poisoned_variables != NULL
          && asan_poisoned_variables->contains (t))
is already fine,
      if (asan_sanitize_use_after_scope ()
          && !asan_no_sanitize_address_p ()
          && !is_vla
          && TREE_ADDRESSABLE (decl)
          && !TREE_STATIC (decl)
          && !DECL_HAS_VALUE_EXPR_P (decl)
          && dbg_cnt (asan_use_after_scope))
should replace the first 2 conditions with asan_poisoned_variables,
          if (asan_sanitize_use_after_scope ()
              && asan_used_labels != NULL
              && asan_used_labels->contains (label))
            asan_poison_variables (asan_poisoned_variables, false, pre_p);
should replace asan_sanitize_use_after_scope () with
asan_poisoned_variables.  IMHO no need to add comments, especially not one
mentioning omp lowering - the gimplifier is called from lots of various
places.

	Jakub
diff mbox

Patch

From 6acf276399b574ced231096eb1eceb32771118e3 Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Thu, 15 Dec 2016 18:23:24 +0100
Subject: [PATCH] Do not sanitize in lower_omp_target context (PR
 sanitizer/78815).

gcc/ChangeLog:

2016-12-15  Martin Liska  <mliska@suse.cz>

	PR sanitizer/78815
	* gimplify.c (gimplify_decl_expr): Do not sanitize
	in lower_omp_target context.
---
 gcc/gimplify.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index b738855a637..02c6eea638b 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1619,12 +1619,17 @@  gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
 	  is_vla = true;
 	}
 
+      /* If gimplify_decl_expr is called from lower_omp_target context, then
+	 asan_poisoned_varibles will be NULL and we do not want to sanitize
+	 in such case.  */
+
       if (asan_sanitize_use_after_scope ()
 	  && !asan_no_sanitize_address_p ()
 	  && !is_vla
 	  && TREE_ADDRESSABLE (decl)
 	  && !TREE_STATIC (decl)
 	  && !DECL_HAS_VALUE_EXPR_P (decl)
+	  && asan_poisoned_variables
 	  && dbg_cnt (asan_use_after_scope))
 	{
 	  asan_poisoned_variables->add (decl);
-- 
2.11.0