lkml.org 
[lkml]   [2019]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.18 14/50] asm-generic: Fix local variable shadow in __set_fixmap_offset
    Date
    3.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit 3694bd76781b76c4f8d2ecd85018feeb1609f0e5 ]

    Currently __set_fixmap_offset is a macro function which has a local
    variable called 'addr'. If a caller passes a 'phys' parameter which is
    derived from a variable also called 'addr', the local variable will
    shadow this, and the compiler will complain about the use of an
    uninitialized variable. To avoid the issue with namespace clashes,
    'addr' is prefixed with a liberal sprinkling of underscores.

    Turning __set_fixmap_offset into a static inline breaks the build for
    several architectures. Fixing this properly requires updates to a number
    of architectures to make them agree on the prototype of __set_fixmap (it
    could be done as a subsequent patch series).

    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    [catalin.marinas@arm.com: squashed the original function patch and macro fixup]
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    include/asm-generic/fixmap.h | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    diff --git a/include/asm-generic/fixmap.h b/include/asm-generic/fixmap.h
    index f23174fb9ec4..10889b63af8f 100644
    --- a/include/asm-generic/fixmap.h
    +++ b/include/asm-generic/fixmap.h
    @@ -67,12 +67,12 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr)
    #endif

    /* Return a pointer with offset calculated */
    -#define __set_fixmap_offset(idx, phys, flags) \
    -({ \
    - unsigned long addr; \
    - __set_fixmap(idx, phys, flags); \
    - addr = fix_to_virt(idx) + ((phys) & (PAGE_SIZE - 1)); \
    - addr; \
    +#define __set_fixmap_offset(idx, phys, flags) \
    +({ \
    + unsigned long ________addr; \
    + __set_fixmap(idx, phys, flags); \
    + ________addr = fix_to_virt(idx) + ((phys) & (PAGE_SIZE - 1)); \
    + ________addr; \
    })

    #define set_fixmap_offset(idx, phys) \
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-04-01 19:40    [W:2.457 / U:0.376 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site