From 5094f7d540ff2f8ccbb3b78a0962a07ffa5960cb Mon Sep 17 00:00:00 2001 From: Maxim Ostapenko Date: Thu, 6 Jul 2017 16:05:00 +0000 Subject: asan.h (asan_sanitize_allocas_p): Declare. gcc/ * asan.h (asan_sanitize_allocas_p): Declare. * asan.c (asan_sanitize_allocas_p): New function. (handle_builtin_stack_restore): Bail out if !asan_sanitize_allocas_p. (handle_builtin_alloca): Likewise. * cfgexpand.c (expand_used_vars): Do not add allocas unpoisoning stuff if !asan_sanitize_allocas_p. * params.def (asan-instrument-allocas): Add new option. * params.h (ASAN_PROTECT_ALLOCAS): Define. * opts.c (common_handle_option): Disable allocas sanitization for KASan by default. gcc/testsuite/ * c-c++-common/asan/kasan-alloca-1.c: New test. * c-c++-common/asan/kasan-alloca-2.c: Likewise. From-SVN: r250032 --- gcc/asan.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'gcc/asan.c') diff --git a/gcc/asan.c b/gcc/asan.c index 252e59fcd4d..95004d734a5 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -310,6 +310,12 @@ asan_sanitize_stack_p (void) return (sanitize_flags_p (SANITIZE_ADDRESS) && ASAN_STACK); } +bool +asan_sanitize_allocas_p (void) +{ + return (asan_sanitize_stack_p () && ASAN_PROTECT_ALLOCAS); +} + /* Checks whether section SEC should be sanitized. */ static bool @@ -569,7 +575,7 @@ get_last_alloca_addr () static void handle_builtin_stack_restore (gcall *call, gimple_stmt_iterator *iter) { - if (!iter) + if (!iter || !asan_sanitize_allocas_p ()) return; tree last_alloca = get_last_alloca_addr (); @@ -607,7 +613,7 @@ handle_builtin_stack_restore (gcall *call, gimple_stmt_iterator *iter) static void handle_builtin_alloca (gcall *call, gimple_stmt_iterator *iter) { - if (!iter) + if (!iter || !asan_sanitize_allocas_p ()) return; gassign *g; -- cgit v1.2.1