Commit 725aea87 authored by Max Filippov's avatar Max Filippov

xtensa: enable KCSAN

Prefix arch-specific barrier macros with '__' to make use of instrumented
generic macros.
Prefix arch-specific bitops with 'arch_' to make use of instrumented
generic functions.
Provide stubs for 64-bit atomics when building with KCSAN.
Disable KCSAN instrumentation in arch/xtensa/boot.
Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
Acked-by: default avatarMarco Elver <elver@google.com>
parent 50718569
...@@ -29,6 +29,7 @@ config XTENSA ...@@ -29,6 +29,7 @@ config XTENSA
select HAVE_ARCH_AUDITSYSCALL select HAVE_ARCH_AUDITSYSCALL
select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
select HAVE_ARCH_KASAN if MMU && !XIP_KERNEL select HAVE_ARCH_KASAN if MMU && !XIP_KERNEL
select HAVE_ARCH_KCSAN
select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_SECCOMP_FILTER
select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRACEHOOK
select HAVE_CONTEXT_TRACKING select HAVE_CONTEXT_TRACKING
......
...@@ -16,6 +16,7 @@ CFLAGS_REMOVE_inffast.o = -pg ...@@ -16,6 +16,7 @@ CFLAGS_REMOVE_inffast.o = -pg
endif endif
KASAN_SANITIZE := n KASAN_SANITIZE := n
KCSAN_SANITIZE := n
CFLAGS_REMOVE_inflate.o += -fstack-protector -fstack-protector-strong CFLAGS_REMOVE_inflate.o += -fstack-protector -fstack-protector-strong
CFLAGS_REMOVE_zmem.o += -fstack-protector -fstack-protector-strong CFLAGS_REMOVE_zmem.o += -fstack-protector -fstack-protector-strong
......
...@@ -11,9 +11,15 @@ ...@@ -11,9 +11,15 @@
#include <asm/core.h> #include <asm/core.h>
#define mb() ({ __asm__ __volatile__("memw" : : : "memory"); }) #define __mb() ({ __asm__ __volatile__("memw" : : : "memory"); })
#define rmb() barrier() #define __rmb() barrier()
#define wmb() mb() #define __wmb() __mb()
#ifdef CONFIG_SMP
#define __smp_mb() __mb()
#define __smp_rmb() __rmb()
#define __smp_wmb() __wmb()
#endif
#if XCHAL_HAVE_S32C1I #if XCHAL_HAVE_S32C1I
#define __smp_mb__before_atomic() barrier() #define __smp_mb__before_atomic() barrier()
......
...@@ -99,7 +99,7 @@ static inline unsigned long __fls(unsigned long word) ...@@ -99,7 +99,7 @@ static inline unsigned long __fls(unsigned long word)
#if XCHAL_HAVE_EXCLUSIVE #if XCHAL_HAVE_EXCLUSIVE
#define BIT_OP(op, insn, inv) \ #define BIT_OP(op, insn, inv) \
static inline void op##_bit(unsigned int bit, volatile unsigned long *p)\ static inline void arch_##op##_bit(unsigned int bit, volatile unsigned long *p)\
{ \ { \
unsigned long tmp; \ unsigned long tmp; \
unsigned long mask = 1UL << (bit & 31); \ unsigned long mask = 1UL << (bit & 31); \
...@@ -119,7 +119,7 @@ static inline void op##_bit(unsigned int bit, volatile unsigned long *p)\ ...@@ -119,7 +119,7 @@ static inline void op##_bit(unsigned int bit, volatile unsigned long *p)\
#define TEST_AND_BIT_OP(op, insn, inv) \ #define TEST_AND_BIT_OP(op, insn, inv) \
static inline int \ static inline int \
test_and_##op##_bit(unsigned int bit, volatile unsigned long *p) \ arch_test_and_##op##_bit(unsigned int bit, volatile unsigned long *p) \
{ \ { \
unsigned long tmp, value; \ unsigned long tmp, value; \
unsigned long mask = 1UL << (bit & 31); \ unsigned long mask = 1UL << (bit & 31); \
...@@ -142,7 +142,7 @@ test_and_##op##_bit(unsigned int bit, volatile unsigned long *p) \ ...@@ -142,7 +142,7 @@ test_and_##op##_bit(unsigned int bit, volatile unsigned long *p) \
#elif XCHAL_HAVE_S32C1I #elif XCHAL_HAVE_S32C1I
#define BIT_OP(op, insn, inv) \ #define BIT_OP(op, insn, inv) \
static inline void op##_bit(unsigned int bit, volatile unsigned long *p)\ static inline void arch_##op##_bit(unsigned int bit, volatile unsigned long *p)\
{ \ { \
unsigned long tmp, value; \ unsigned long tmp, value; \
unsigned long mask = 1UL << (bit & 31); \ unsigned long mask = 1UL << (bit & 31); \
...@@ -163,7 +163,7 @@ static inline void op##_bit(unsigned int bit, volatile unsigned long *p)\ ...@@ -163,7 +163,7 @@ static inline void op##_bit(unsigned int bit, volatile unsigned long *p)\
#define TEST_AND_BIT_OP(op, insn, inv) \ #define TEST_AND_BIT_OP(op, insn, inv) \
static inline int \ static inline int \
test_and_##op##_bit(unsigned int bit, volatile unsigned long *p) \ arch_test_and_##op##_bit(unsigned int bit, volatile unsigned long *p) \
{ \ { \
unsigned long tmp, value; \ unsigned long tmp, value; \
unsigned long mask = 1UL << (bit & 31); \ unsigned long mask = 1UL << (bit & 31); \
...@@ -205,6 +205,8 @@ BIT_OPS(change, "xor", ) ...@@ -205,6 +205,8 @@ BIT_OPS(change, "xor", )
#undef BIT_OP #undef BIT_OP
#undef TEST_AND_BIT_OP #undef TEST_AND_BIT_OP
#include <asm-generic/bitops/instrumented-atomic.h>
#include <asm-generic/bitops/le.h> #include <asm-generic/bitops/le.h>
#include <asm-generic/bitops/ext2-atomic-setbit.h> #include <asm-generic/bitops/ext2-atomic-setbit.h>
......
...@@ -8,3 +8,5 @@ lib-y += memcopy.o memset.o checksum.o \ ...@@ -8,3 +8,5 @@ lib-y += memcopy.o memset.o checksum.o \
divsi3.o udivsi3.o modsi3.o umodsi3.o mulsi3.o \ divsi3.o udivsi3.o modsi3.o umodsi3.o mulsi3.o \
usercopy.o strncpy_user.o strnlen_user.o usercopy.o strncpy_user.o strnlen_user.o
lib-$(CONFIG_PCI) += pci-auto.o lib-$(CONFIG_PCI) += pci-auto.o
lib-$(CONFIG_KCSAN) += kcsan-stubs.o
KCSAN_SANITIZE_kcsan-stubs.o := n
// SPDX-License-Identifier: GPL-2.0
#include <linux/bug.h>
#include <linux/types.h>
void __atomic_store_8(volatile void *p, u64 v, int i)
{
BUG();
}
u64 __atomic_load_8(const volatile void *p, int i)
{
BUG();
}
u64 __atomic_exchange_8(volatile void *p, u64 v, int i)
{
BUG();
}
bool __atomic_compare_exchange_8(volatile void *p1, void *p2, u64 v, bool b, int i1, int i2)
{
BUG();
}
u64 __atomic_fetch_add_8(volatile void *p, u64 v, int i)
{
BUG();
}
u64 __atomic_fetch_sub_8(volatile void *p, u64 v, int i)
{
BUG();
}
u64 __atomic_fetch_and_8(volatile void *p, u64 v, int i)
{
BUG();
}
u64 __atomic_fetch_or_8(volatile void *p, u64 v, int i)
{
BUG();
}
u64 __atomic_fetch_xor_8(volatile void *p, u64 v, int i)
{
BUG();
}
u64 __atomic_fetch_nand_8(volatile void *p, u64 v, int i)
{
BUG();
}
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