lkml.org 
[lkml]   [2015]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v11 18/19] module: fix types of device tables aliases
    Date
    MODULE_DEVICE_TABLE() macro used to create aliases to device tables.
    Normally alias should have the same type as aliased symbol.

    Device tables are arrays, so they have 'struct type##_device_id[x]'
    types. Alias created by MODULE_DEVICE_TABLE() will have non-array type -
    'struct type##_device_id'.

    This inconsistency confuses compiler, it could make a wrong
    assumption about variable's size which leads KASan to
    produce a false positive report about out of bounds access.

    For every global variable compiler calls __asan_register_globals()
    passing information about global variable (address, size, size with
    redzone, name ...) __asan_register_globals() poison symbols
    redzone to detect possible out of bounds accesses.

    When symbol has an alias __asan_register_globals() will be called
    as for symbol so for alias. Compiler determines size of variable by
    size of variable's type. Alias and symbol have the same address,
    so if alias have the wrong size part of memory that actually belongs
    to the symbol could be poisoned as redzone of alias symbol.

    By fixing type of alias symbol we will fix size of it, so
    __asan_register_globals() will not poison valid memory.

    Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>
    ---
    include/linux/module.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/include/linux/module.h b/include/linux/module.h
    index b653d7c..42999fe 100644
    --- a/include/linux/module.h
    +++ b/include/linux/module.h
    @@ -135,7 +135,7 @@ void trim_init_extable(struct module *m);
    #ifdef MODULE
    /* Creates an alias so file2alias.c can find device table. */
    #define MODULE_DEVICE_TABLE(type, name) \
    - extern const struct type##_device_id __mod_##type##__##name##_device_table \
    +extern const typeof(name) __mod_##type##__##name##_device_table \
    __attribute__ ((unused, alias(__stringify(name))))
    #else /* !MODULE */
    #define MODULE_DEVICE_TABLE(type, name)
    --
    2.2.2


    \
     
     \ /
      Last update: 2015-02-03 19:01    [W:4.065 / U:1.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site