This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: asan: support for globals in kernel
- From: Dmitry Vyukov <dvyukov at google dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Dodji Seketeli <dodji at redhat dot com>, Andrey Ryabinin <a dot ryabinin at samsung dot com>, Yury Gribov <y dot gribov at samsung dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, Kostya Serebryany <kcc at google dot com>, Dmitry Chernenkov <dmitryc at google dot com>, Andrey Konovalov <andreyknvl at google dot com>
- Date: Tue, 2 Dec 2014 22:12:30 +0400
- Subject: Re: asan: support for globals in kernel
- Authentication-results: sourceware.org; auth=none
- References: <CACT4Y+Z=RCYyAu3tBH2DMW9pgY+XDfcgsYRMa9mhw7eS7=DzLw at mail dot gmail dot com> <20141202180436 dot GK1860 at tucnak dot redhat dot com>
On Tue, Dec 2, 2014 at 9:04 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Tue, Dec 02, 2014 at 09:56:36PM +0400, Dmitry Vyukov wrote:
>> --- gcc/ChangeLog (revision 218280)
>> +++ gcc/ChangeLog (working copy)
>> @@ -1,3 +1,8 @@
>> +2014-12-02 Dmitry Vyukov <dvyukov@google.com>
>> +
>> + * asan.c: (asan_finish_file): Use default priority for constructors
>> + in kernel mode.
>
> Seems your MUA is eating tabs, I'll assume they are where I'd expect them to
> be.
>
>> @@ -2440,6 +2442,7 @@
>> {
>> varpool_node *vnode;
>> unsigned HOST_WIDE_INT gcount = 0;
>> + int priority;
>>
>> if (shadow_ptr_types[0] == NULL_TREE)
>> asan_init_shadow_ptr_types ();
>
> No need to declare this separately,
>
>> @@ -2448,6 +2451,13 @@
>> nor after .LASAN* array. */
>> flag_sanitize &= ~SANITIZE_ADDRESS;
>>
>> + /* For user-space we want asan constructors to run first.
>> + Linux kernel does not support priorities other than default, and the only
>> + other user of constructors is coverage. So we run with the default
>> + priority. */
>> + priority = flag_sanitize & SANITIZE_USER_ADDRESS ?
>> + MAX_RESERVED_INIT_PRIORITY - 1 : DEFAULT_INIT_PRIORITY;
>
> formatting plus declare it here too. This should be
> int priority = flag_sanitize & SANITIZE_USER_ADDRESS
> ? MAX_RESERVED_INIT_PRIORITY - 1 : DEFAULT_INIT_PRIORITY;
> (? should be on the second line and aligned below flag_sanitize).
>
> Ok for trunk with that change.
>
> Shall we backport it to 4.9 branch too?
If it's doable, it would be nice. Thanks.
When do we expect next 4.9 release?
Yes, my mail client eats tabs, here is proper version:
https://codereview.appspot.com/176570043/diff/20001/gcc/ChangeLog
Sorry.
And here is updated text version with eaten tabs:
Index: gcc/ChangeLog
===================================================================
--- gcc/ChangeLog (revision 218280)
+++ gcc/ChangeLog (working copy)
@@ -1,3 +1,8 @@
+2014-12-02 Dmitry Vyukov <dvyukov@google.com>
+
+ * asan.c: (asan_finish_file): Use default priority for constructors
+ in kernel mode.
+
2014-12-02 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
PR target/64115
Index: gcc/asan.c
===================================================================
--- gcc/asan.c (revision 218280)
+++ gcc/asan.c (working copy)
@@ -1348,7 +1348,9 @@
the var that is selected by the linker will have
padding or not. */
|| DECL_ONE_ONLY (decl)
- /* Similarly for common vars. People can use -fno-common. */
+ /* Similarly for common vars. People can use -fno-common.
+ Note: Linux kernel is built with -fno-common, so we do instrument
+ globals there even if it is C. */
|| (DECL_COMMON (decl) && TREE_PUBLIC (decl))
/* Don't protect if using user section, often vars placed
into user section from multiple TUs are then assumed
@@ -2448,6 +2450,13 @@
nor after .LASAN* array. */
flag_sanitize &= ~SANITIZE_ADDRESS;
+ /* For user-space we want asan constructors to run first.
+ Linux kernel does not support priorities other than default, and the only
+ other user of constructors is coverage. So we run with the default
+ priority. */
+ int priority = flag_sanitize & SANITIZE_USER_ADDRESS
+ ? MAX_RESERVED_INIT_PRIORITY - 1 : DEFAULT_INIT_PRIORITY;
+
if (flag_sanitize & SANITIZE_USER_ADDRESS)
{
tree fn = builtin_decl_implicit (BUILT_IN_ASAN_INIT);
@@ -2503,12 +2512,10 @@
build_fold_addr_expr (var),
gcount_tree),
&dtor_statements);
- cgraph_build_static_cdtor ('D', dtor_statements,
- MAX_RESERVED_INIT_PRIORITY - 1);
+ cgraph_build_static_cdtor ('D', dtor_statements, priority);
}
if (asan_ctor_statements)
- cgraph_build_static_cdtor ('I', asan_ctor_statements,
- MAX_RESERVED_INIT_PRIORITY - 1);
+ cgraph_build_static_cdtor ('I', asan_ctor_statements, priority);
flag_sanitize |= SANITIZE_ADDRESS;
}