/
usr
/
src
/
kernels
/
4.18.0-553.121.1.el8_10.x86_64
/
include
/
asm-generic
/
/usr/src/kernels/4.18.0-553.121.1.el8_10.x86_64/include/asm-generic
mkdir
upload
Name
Size
Mode
Actions
bitops/
-
0755
rm
vdso/
-
0755
rm
4level-fixup.h
1098
0644
edit
dl
rm
5level-fixup.h
1273
0644
edit
dl
rm
asm-offsets.h
35
0644
edit
dl
rm
asm-prototypes.h
507
0644
edit
dl
rm
atomic-instrumented.h
13623
0644
edit
dl
rm
atomic-long.h
8048
0644
edit
dl
rm
atomic.h
4391
0644
edit
dl
rm
atomic64.h
1797
0644
edit
dl
rm
audit_change_attr.h
484
0644
edit
dl
rm
audit_dir_write.h
528
0644
edit
dl
rm
audit_read.h
241
0644
edit
dl
rm
audit_signal.h
36
0644
edit
dl
rm
audit_write.h
461
0644
edit
dl
rm
barrier.h
6868
0644
edit
dl
rm
bitops-instrumented.h
7909
0644
edit
dl
rm
bitops.h
1119
0644
edit
dl
rm
bitsperlong.h
592
0644
edit
dl
rm
bug.h
6720
0644
edit
dl
rm
bugs.h
267
0644
edit
dl
rm
cache.h
384
0644
edit
dl
rm
cacheflush.h
1340
0644
edit
dl
rm
checksum.h
2329
0644
edit
dl
rm
cmpxchg-local.h
1464
0644
edit
dl
rm
cmpxchg.h
2286
0644
edit
dl
rm
compat.h
658
0644
edit
dl
rm
current.h
256
0644
edit
dl
rm
delay.h
1157
0644
edit
dl
rm
device.h
245
0644
edit
dl
rm
div64.h
7458
0644
edit
dl
rm
dma-contiguous.h
238
0644
edit
dl
rm
dma-mapping.h
248
0644
edit
dl
rm
dma.h
553
0644
edit
dl
rm
early_ioremap.h
1696
0644
edit
dl
rm
emergency-restart.h
248
0644
edit
dl
rm
error-injection.h
1178
0644
edit
dl
rm
exec.h
667
0644
edit
dl
rm
export.h
2002
0644
edit
dl
rm
extable.h
802
0644
edit
dl
rm
fb.h
271
0644
edit
dl
rm
fixmap.h
2904
0644
edit
dl
rm
ftrace.h
460
0644
edit
dl
rm
futex.h
2964
0644
edit
dl
rm
getorder.h
1487
0644
edit
dl
rm
gpio.h
4558
0644
edit
dl
rm
hardirq.h
532
0644
edit
dl
rm
hugetlb.h
1326
0644
edit
dl
rm
hw_irq.h
270
0644
edit
dl
rm
hyperv-tlfs.h
20696
0644
edit
dl
rm
ide_iops.h
791
0644
edit
dl
rm
int-ll64.h
863
0644
edit
dl
rm
io.h
24167
0644
edit
dl
rm
ioctl.h
506
0644
edit
dl
rm
iomap.h
4033
0644
edit
dl
rm
irq.h
403
0644
edit
dl
rm
irqflags.h
1543
0644
edit
dl
rm
irq_regs.h
980
0644
edit
dl
rm
irq_work.h
194
0644
edit
dl
rm
kdebug.h
182
0644
edit
dl
rm
kmap_size.h
263
0644
edit
dl
rm
kprobes.h
868
0644
edit
dl
rm
kvm_para.h
549
0644
edit
dl
rm
kvm_types.h
113
0644
edit
dl
rm
linkage.h
225
0644
edit
dl
rm
local.h
2282
0644
edit
dl
rm
local64.h
3887
0644
edit
dl
rm
mcs_spinlock.h
260
0644
edit
dl
rm
memory_model.h
2209
0644
edit
dl
rm
mm-arch-hooks.h
388
0644
edit
dl
rm
mmiowb.h
1731
0644
edit
dl
rm
mmiowb_types.h
249
0644
edit
dl
rm
mmu.h
449
0644
edit
dl
rm
mmu_context.h
881
0644
edit
dl
rm
mm_hooks.h
854
0644
edit
dl
rm
module.h
1118
0644
edit
dl
rm
mshyperv.h
8592
0644
edit
dl
rm
msi.h
1053
0644
edit
dl
rm
numa.h
1544
0644
edit
dl
rm
page.h
2454
0644
edit
dl
rm
param.h
367
0644
edit
dl
rm
parport.h
604
0644
edit
dl
rm
pci.h
401
0644
edit
dl
rm
pci_iomap.h
1775
0644
edit
dl
rm
percpu.h
13026
0644
edit
dl
rm
pgalloc.h
342
0644
edit
dl
rm
pgtable-nop4d-hack.h
1965
0644
edit
dl
rm
pgtable-nop4d.h
1772
0644
edit
dl
rm
pgtable-nopmd.h
1944
0644
edit
dl
rm
pgtable-nopud.h
2071
0644
edit
dl
rm
pgtable.h
33765
0644
edit
dl
rm
pgtable_uffd.h
1052
0644
edit
dl
rm
preempt.h
1994
0644
edit
dl
rm
ptrace.h
1615
0644
edit
dl
rm
qrwlock.h
4315
0644
edit
dl
rm
qrwlock_types.h
682
0644
edit
dl
rm
qspinlock.h
3816
0644
edit
dl
rm
qspinlock_types.h
2590
0644
edit
dl
rm
resource.h
1100
0644
edit
dl
rm
seccomp.h
1328
0644
edit
dl
rm
sections.h
5306
0644
edit
dl
rm
segment.h
249
0644
edit
dl
rm
serial.h
345
0644
edit
dl
rm
set_memory.h
362
0644
edit
dl
rm
signal.h
308
0644
edit
dl
rm
simd.h
436
0644
edit
dl
rm
sizes.h
78
0644
edit
dl
rm
spinlock.h
329
0644
edit
dl
rm
statfs.h
169
0644
edit
dl
rm
string.h
281
0644
edit
dl
rm
switch_to.h
962
0644
edit
dl
rm
syscall.h
6389
0644
edit
dl
rm
syscalls.h
739
0644
edit
dl
rm
termios-base.h
2164
0644
edit
dl
rm
termios.h
2877
0644
edit
dl
rm
timex.h
508
0644
edit
dl
rm
tlb.h
22153
0644
edit
dl
rm
tlbflush.h
485
0644
edit
dl
rm
topology.h
2234
0644
edit
dl
rm
trace_clock.h
391
0644
edit
dl
rm
uaccess.h
5272
0644
edit
dl
rm
unaligned.h
1078
0644
edit
dl
rm
unistd.h
318
0644
edit
dl
rm
user.h
242
0644
edit
dl
rm
vga.h
587
0644
edit
dl
rm
vmlinux.lds.h
28848
0644
edit
dl
rm
vtime.h
52
0644
edit
dl
rm
word-at-a-time.h
2817
0644
edit
dl
rm
xor.h
13961
0644
edit
dl
rm
Edit:
/usr/src/kernels/4.18.0-553.121.1.el8_10.x86_64/include/asm-generic/atomic-instrumented.h
(13623B)
/* * This file provides wrappers with KASAN instrumentation for atomic operations. * To use this functionality an arch's atomic.h file needs to define all * atomic operations with arch_ prefix (e.g. arch_atomic_read()) and include * this file at the end. This file provides atomic_read() that forwards to * arch_atomic_read() for actual atomic operation. * Note: if an arch atomic operation is implemented by means of other atomic * operations (e.g. atomic_read()/atomic_cmpxchg() loop), then it needs to use * arch_ variants (i.e. arch_atomic_read()/arch_atomic_cmpxchg()) to avoid * double instrumentation. */ #ifndef _LINUX_ATOMIC_INSTRUMENTED_H #define _LINUX_ATOMIC_INSTRUMENTED_H #include <linux/build_bug.h> #include <linux/kasan-checks.h> static __always_inline int atomic_read(const atomic_t *v) { kasan_check_read(v, sizeof(*v)); return arch_atomic_read(v); } static __always_inline s64 atomic64_read(const atomic64_t *v) { kasan_check_read(v, sizeof(*v)); return arch_atomic64_read(v); } static __always_inline void atomic_set(atomic_t *v, int i) { kasan_check_write(v, sizeof(*v)); arch_atomic_set(v, i); } static __always_inline void atomic64_set(atomic64_t *v, s64 i) { kasan_check_write(v, sizeof(*v)); arch_atomic64_set(v, i); } static __always_inline int atomic_xchg(atomic_t *v, int i) { kasan_check_write(v, sizeof(*v)); return arch_atomic_xchg(v, i); } static __always_inline s64 atomic64_xchg(atomic64_t *v, s64 i) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_xchg(v, i); } static __always_inline int atomic_cmpxchg(atomic_t *v, int old, int new) { kasan_check_write(v, sizeof(*v)); return arch_atomic_cmpxchg(v, old, new); } static __always_inline s64 atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_cmpxchg(v, old, new); } #ifdef arch_atomic_try_cmpxchg #define atomic_try_cmpxchg atomic_try_cmpxchg static __always_inline bool atomic_try_cmpxchg(atomic_t *v, int *old, int new) { kasan_check_write(v, sizeof(*v)); kasan_check_read(old, sizeof(*old)); return arch_atomic_try_cmpxchg(v, old, new); } #endif #ifdef arch_atomic64_try_cmpxchg #define atomic64_try_cmpxchg atomic64_try_cmpxchg static __always_inline bool atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new) { kasan_check_write(v, sizeof(*v)); kasan_check_read(old, sizeof(*old)); return arch_atomic64_try_cmpxchg(v, old, new); } #endif #ifdef arch_atomic_fetch_add_unless #define atomic_fetch_add_unless atomic_fetch_add_unless static __always_inline int atomic_fetch_add_unless(atomic_t *v, int a, int u) { kasan_check_write(v, sizeof(*v)); return arch_atomic_fetch_add_unless(v, a, u); } #endif #ifdef arch_atomic64_fetch_add_unless #define atomic64_fetch_add_unless atomic64_fetch_add_unless static __always_inline s64 atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_fetch_add_unless(v, a, u); } #endif #ifdef arch_atomic_inc #define atomic_inc atomic_inc static __always_inline void atomic_inc(atomic_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic_inc(v); } #endif #ifdef arch_atomic64_inc #define atomic64_inc atomic64_inc static __always_inline void atomic64_inc(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic64_inc(v); } #endif #ifdef arch_atomic_dec #define atomic_dec atomic_dec static __always_inline void atomic_dec(atomic_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic_dec(v); } #endif #ifdef atch_atomic64_dec #define atomic64_dec static __always_inline void atomic64_dec(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic64_dec(v); } #endif static __always_inline void atomic_add(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic_add(i, v); } static __always_inline void atomic64_add(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic64_add(i, v); } static __always_inline void atomic_sub(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic_sub(i, v); } static __always_inline void atomic64_sub(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic64_sub(i, v); } static __always_inline void atomic_and(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic_and(i, v); } static __always_inline void atomic64_and(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic64_and(i, v); } static __always_inline void atomic_or(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic_or(i, v); } static __always_inline void atomic64_or(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic64_or(i, v); } static __always_inline void atomic_xor(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic_xor(i, v); } static __always_inline void atomic64_xor(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); arch_atomic64_xor(i, v); } #ifdef arch_atomic_inc_return #define atomic_inc_return atomic_inc_return static __always_inline int atomic_inc_return(atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_inc_return(v); } #endif #ifdef arch_atomic64_in_return #define atomic64_inc_return atomic64_inc_return static __always_inline s64 atomic64_inc_return(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_inc_return(v); } #endif #ifdef arch_atomic_dec_return #define atomic_dec_return atomic_dec_return static __always_inline int atomic_dec_return(atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_dec_return(v); } #endif #ifdef arch_atomic64_dec_return #define atomic64_dec_return atomic64_dec_return static __always_inline s64 atomic64_dec_return(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_dec_return(v); } #endif #ifdef arch_atomic64_inc_not_zero #define atomic64_inc_not_zero atomic64_inc_not_zero static __always_inline bool atomic64_inc_not_zero(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_inc_not_zero(v); } #endif #ifdef arch_atomic64_dec_if_positive #define atomic64_dec_if_positive atomic64_dec_if_positive static __always_inline s64 atomic64_dec_if_positive(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_dec_if_positive(v); } #endif #ifdef arch_atomic_dec_and_test #define atomic_dec_and_test atomic_dec_and_test static __always_inline bool atomic_dec_and_test(atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_dec_and_test(v); } #endif #ifdef arch_atomic64_dec_and_test #define atomic64_dec_and_test atomic64_dec_and_test static __always_inline bool atomic64_dec_and_test(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_dec_and_test(v); } #endif #ifdef arch_atomic_inc_and_test #define atomic_inc_and_test atomic_inc_and_test static __always_inline bool atomic_inc_and_test(atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_inc_and_test(v); } #endif #ifdef arch_atomic64_inc_and_test #define atomic64_inc_and_test atomic64_inc_and_test static __always_inline bool atomic64_inc_and_test(atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_inc_and_test(v); } #endif static __always_inline int atomic_add_return(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_add_return(i, v); } static __always_inline s64 atomic64_add_return(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_add_return(i, v); } static __always_inline int atomic_sub_return(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_sub_return(i, v); } static __always_inline s64 atomic64_sub_return(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_sub_return(i, v); } static __always_inline int atomic_fetch_add(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_fetch_add(i, v); } static __always_inline s64 atomic64_fetch_add(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_fetch_add(i, v); } static __always_inline int atomic_fetch_sub(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_fetch_sub(i, v); } static __always_inline s64 atomic64_fetch_sub(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_fetch_sub(i, v); } static __always_inline int atomic_fetch_and(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_fetch_and(i, v); } static __always_inline s64 atomic64_fetch_and(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_fetch_and(i, v); } static __always_inline int atomic_fetch_or(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_fetch_or(i, v); } static __always_inline s64 atomic64_fetch_or(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_fetch_or(i, v); } static __always_inline int atomic_fetch_xor(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_fetch_xor(i, v); } static __always_inline s64 atomic64_fetch_xor(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_fetch_xor(i, v); } #ifdef arch_atomic_sub_and_test #define atomic_sub_and_test atomic_sub_and_test static __always_inline bool atomic_sub_and_test(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_sub_and_test(i, v); } #endif #ifdef arch_atomic64_sub_and_test #define atomic64_sub_and_test atomic64_sub_and_test static __always_inline bool atomic64_sub_and_test(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_sub_and_test(i, v); } #endif #ifdef arch_atomic_add_negative #define atomic_add_negative atomic_add_negative static __always_inline bool atomic_add_negative(int i, atomic_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic_add_negative(i, v); } #endif #ifdef arch_atomic64_add_negative #define atomic64_add_negative atomic64_add_negative static __always_inline bool atomic64_add_negative(s64 i, atomic64_t *v) { kasan_check_write(v, sizeof(*v)); return arch_atomic64_add_negative(i, v); } #endif static __always_inline unsigned long cmpxchg_size(volatile void *ptr, unsigned long old, unsigned long new, int size) { kasan_check_write(ptr, size); switch (size) { case 1: return arch_cmpxchg((u8 *)ptr, (u8)old, (u8)new); case 2: return arch_cmpxchg((u16 *)ptr, (u16)old, (u16)new); case 4: return arch_cmpxchg((u32 *)ptr, (u32)old, (u32)new); case 8: BUILD_BUG_ON(sizeof(unsigned long) != 8); return arch_cmpxchg((u64 *)ptr, (u64)old, (u64)new); } BUILD_BUG(); return 0; } #define cmpxchg(ptr, old, new) \ ({ \ ((__typeof__(*(ptr)))cmpxchg_size((ptr), (unsigned long)(old), \ (unsigned long)(new), sizeof(*(ptr)))); \ }) static __always_inline unsigned long sync_cmpxchg_size(volatile void *ptr, unsigned long old, unsigned long new, int size) { kasan_check_write(ptr, size); switch (size) { case 1: return arch_sync_cmpxchg((u8 *)ptr, (u8)old, (u8)new); case 2: return arch_sync_cmpxchg((u16 *)ptr, (u16)old, (u16)new); case 4: return arch_sync_cmpxchg((u32 *)ptr, (u32)old, (u32)new); case 8: BUILD_BUG_ON(sizeof(unsigned long) != 8); return arch_sync_cmpxchg((u64 *)ptr, (u64)old, (u64)new); } BUILD_BUG(); return 0; } #define sync_cmpxchg(ptr, old, new) \ ({ \ ((__typeof__(*(ptr)))sync_cmpxchg_size((ptr), \ (unsigned long)(old), (unsigned long)(new), \ sizeof(*(ptr)))); \ }) static __always_inline unsigned long cmpxchg_local_size(volatile void *ptr, unsigned long old, unsigned long new, int size) { kasan_check_write(ptr, size); switch (size) { case 1: return arch_cmpxchg_local((u8 *)ptr, (u8)old, (u8)new); case 2: return arch_cmpxchg_local((u16 *)ptr, (u16)old, (u16)new); case 4: return arch_cmpxchg_local((u32 *)ptr, (u32)old, (u32)new); case 8: BUILD_BUG_ON(sizeof(unsigned long) != 8); return arch_cmpxchg_local((u64 *)ptr, (u64)old, (u64)new); } BUILD_BUG(); return 0; } #define cmpxchg_local(ptr, old, new) \ ({ \ ((__typeof__(*(ptr)))cmpxchg_local_size((ptr), \ (unsigned long)(old), (unsigned long)(new), \ sizeof(*(ptr)))); \ }) static __always_inline u64 cmpxchg64_size(volatile u64 *ptr, u64 old, u64 new) { kasan_check_write(ptr, sizeof(*ptr)); return arch_cmpxchg64(ptr, old, new); } #define cmpxchg64(ptr, old, new) \ ({ \ ((__typeof__(*(ptr)))cmpxchg64_size((ptr), (u64)(old), \ (u64)(new))); \ }) static __always_inline u64 cmpxchg64_local_size(volatile u64 *ptr, u64 old, u64 new) { kasan_check_write(ptr, sizeof(*ptr)); return arch_cmpxchg64_local(ptr, old, new); } #define cmpxchg64_local(ptr, old, new) \ ({ \ ((__typeof__(*(ptr)))cmpxchg64_local_size((ptr), (u64)(old), \ (u64)(new))); \ }) /* * Originally we had the following code here: * __typeof__(p1) ____p1 = (p1); * kasan_check_write(____p1, 2 * sizeof(*____p1)); * arch_cmpxchg_double(____p1, (p2), (o1), (o2), (n1), (n2)); * But it leads to compilation failures (see gcc issue 72873). * So for now it's left non-instrumented. * There are few callers of cmpxchg_double(), so it's not critical. */ #define cmpxchg_double(p1, p2, o1, o2, n1, n2) \ ({ \ arch_cmpxchg_double((p1), (p2), (o1), (o2), (n1), (n2)); \ }) #define cmpxchg_double_local(p1, p2, o1, o2, n1, n2) \ ({ \ arch_cmpxchg_double_local((p1), (p2), (o1), (o2), (n1), (n2)); \ }) #endif /* _LINUX_ATOMIC_INSTRUMENTED_H */
Save
cmd:
run