Commit 7cfa10f3 by Maxim Ostapenko Committed by Maxim Ostapenko

re PR sanitizer/71480 (ASan should align string constants to shadow granularity.)

2016-06-10  Maxim Ostapenko  <m.ostapenko@samsung.com>

	PR sanitizer/71480
	* varasm.c (place_block_symbol): Adjust alignment for asan protected
	STRING_CSTs even if TREE_CONSTANT_POOL_ADDRESS_P.

	* c-c++-common/asan/pr71480.c: New test.

From-SVN: r237306
parent aade5c72
2016-06-10 Maxim Ostapenko <m.ostapenko@samsung.com>
PR sanitizer/71480
* varasm.c (place_block_symbol): Adjust alignment for asan protected
STRING_CSTs even if TREE_CONSTANT_POOL_ADDRESS_P.
2016-06-10 Jan Hubicka <hubicka@ucw.cz> 2016-06-10 Jan Hubicka <hubicka@ucw.cz>
* profile.c: Include cfgloop.h. * profile.c: Include cfgloop.h.
......
2016-06-10 Maxim Ostapenko <m.ostapenko@samsung.com>
PR sanitizer/71480
* c-c++-common/asan/pr71480.c: New test.
2016-06-10 H.J. Lu <hongjiu.lu@intel.com> 2016-06-10 H.J. Lu <hongjiu.lu@intel.com>
* gcc.dg/guality/pr68037-1.c (ASMNAME): New. * gcc.dg/guality/pr68037-1.c (ASMNAME): New.
......
/* { dg-do run } */
__attribute__ ((noinline, noclone)) int
foo (char *c)
{
asm volatile ("" : : "r" (c) : "memory");
return 1;
}
__attribute__ ((noinline, noclone)) void
bar (char *c)
{
asm volatile ("" : : "r" (c) : "memory");
}
int main ()
{
char tpl[20] = "/tmp/test.XXXXXX";
char tpl2[20] = "/tmp/test.XXXXXX";
int fd = foo (tpl);
int fd2 = foo (tpl2);
if (fd == -1)
{
if (fd2 != -1)
bar (tpl2);
return 1;
}
if (fd2 == -1)
return 1;
bar (tpl);
bar (tpl2);
if (__builtin_strcmp (tpl, "/tmp/test.XXXXXX") != 0)
return 1;
if (__builtin_strcmp (tpl, tpl2) != 0)
return 1;
return 0;
}
...@@ -7201,7 +7201,11 @@ place_block_symbol (rtx symbol) ...@@ -7201,7 +7201,11 @@ place_block_symbol (rtx symbol)
if ((flag_sanitize & SANITIZE_ADDRESS) if ((flag_sanitize & SANITIZE_ADDRESS)
&& TREE_CODE (DECL_INITIAL (decl)) == STRING_CST && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
&& asan_protect_global (DECL_INITIAL (decl))) && asan_protect_global (DECL_INITIAL (decl)))
size += asan_red_zone_size (size); {
size += asan_red_zone_size (size);
alignment = MAX (alignment,
ASAN_RED_ZONE_SIZE * BITS_PER_UNIT);
}
} }
else else
{ {
......
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