• Linus Walleij's avatar
    ARM: 9014/2: Replace string mem* functions for KASan · d6d51a96
    Linus Walleij authored
    Functions like memset()/memmove()/memcpy() do a lot of memory
    accesses.
    
    If a bad pointer is passed to one of these functions it is important
    to catch this. Compiler instrumentation cannot do this since these
    functions are written in assembly.
    
    KASan replaces these memory functions with instrumented variants.
    
    The original functions are declared as weak symbols so that
    the strong definitions in mm/kasan/kasan.c can replace them.
    
    The original functions have aliases with a '__' prefix in their
    name, so we can call the non-instrumented variant if needed.
    
    We must use __memcpy()/__memset() in place of memcpy()/memset()
    when we copy .data to RAM and when we clear .bss, because
    kasan_early_init cannot be called before the initialization of
    .data and .bss.
    
    For the kernel compression and EFI libstub's custom string
    libraries we need a special quirk: even if these are built
    without KASan enabled, they rely on the global headers for their
    custom string libraries, which means that e.g. memcpy()
    will be defined to __memcpy() and we get link failures.
    Since these implementations are written i C rather than
    assembly we use e.g. __alias(memcpy) to redirected any
    users back to the local implementation.
    
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: kasan-dev@googlegroups.com
    Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Tested-by: Ard Biesheuvel <ardb@kernel.org> # QEMU/KVM/mach-virt/LPAE/8G
    Tested-by: Florian Fainelli <f.fainelli@gmail.com> # Brahma SoCs
    Tested-by: Ahmad Fatoum <a.fatoum@pengutronix.de> # i.MX6Q
    Reported-by: default avatarRussell King - ARM Linux <rmk+kernel@armlinux.org.uk>
    Signed-off-by: default avatarAhmad Fatoum <a.fatoum@pengutronix.de>
    Signed-off-by: default avatarAbbott Liu <liuwenliang@huawei.com>
    Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    d6d51a96
string.c 2.88 KB