LCOV - code coverage report
Current view: top level - include/linux - instrumented.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 21 21 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : 
       3             : /*
       4             :  * This header provides generic wrappers for memory access instrumentation that
       5             :  * the compiler cannot emit for: KASAN, KCSAN.
       6             :  */
       7             : #ifndef _LINUX_INSTRUMENTED_H
       8             : #define _LINUX_INSTRUMENTED_H
       9             : 
      10             : #include <linux/compiler.h>
      11             : #include <linux/kasan-checks.h>
      12             : #include <linux/kcsan-checks.h>
      13             : #include <linux/types.h>
      14             : 
      15             : /**
      16             :  * instrument_read - instrument regular read access
      17             :  *
      18             :  * Instrument a regular read access. The instrumentation should be inserted
      19             :  * before the actual read happens.
      20             :  *
      21             :  * @ptr address of access
      22             :  * @size size of access
      23             :  */
      24             : static __always_inline void instrument_read(const volatile void *v, size_t size)
      25             : {
      26             :         kasan_check_read(v, size);
      27             :         kcsan_check_read(v, size);
      28             : }
      29             : 
      30             : /**
      31             :  * instrument_write - instrument regular write access
      32             :  *
      33             :  * Instrument a regular write access. The instrumentation should be inserted
      34             :  * before the actual write happens.
      35             :  *
      36             :  * @ptr address of access
      37             :  * @size size of access
      38             :  */
      39     1345018 : static __always_inline void instrument_write(const volatile void *v, size_t size)
      40             : {
      41     1345018 :         kasan_check_write(v, size);
      42     1345025 :         kcsan_check_write(v, size);
      43             : }
      44             : 
      45             : /**
      46             :  * instrument_read_write - instrument regular read-write access
      47             :  *
      48             :  * Instrument a regular write access. The instrumentation should be inserted
      49             :  * before the actual write happens.
      50             :  *
      51             :  * @ptr address of access
      52             :  * @size size of access
      53             :  */
      54      120852 : static __always_inline void instrument_read_write(const volatile void *v, size_t size)
      55             : {
      56      120852 :         kasan_check_write(v, size);
      57      112305 :         kcsan_check_read_write(v, size);
      58             : }
      59             : 
      60             : /**
      61             :  * instrument_atomic_read - instrument atomic read access
      62             :  *
      63             :  * Instrument an atomic read access. The instrumentation should be inserted
      64             :  * before the actual read happens.
      65             :  *
      66             :  * @ptr address of access
      67             :  * @size size of access
      68             :  */
      69   274321976 : static __always_inline void instrument_atomic_read(const volatile void *v, size_t size)
      70             : {
      71   274262277 :         kasan_check_read(v, size);
      72   273141496 :         kcsan_check_atomic_read(v, size);
      73             : }
      74             : 
      75             : /**
      76             :  * instrument_atomic_write - instrument atomic write access
      77             :  *
      78             :  * Instrument an atomic write access. The instrumentation should be inserted
      79             :  * before the actual write happens.
      80             :  *
      81             :  * @ptr address of access
      82             :  * @size size of access
      83             :  */
      84     6789508 : static __always_inline void instrument_atomic_write(const volatile void *v, size_t size)
      85             : {
      86     6397777 :         kasan_check_write(v, size);
      87     6008175 :         kcsan_check_atomic_write(v, size);
      88             : }
      89             : 
      90             : /**
      91             :  * instrument_atomic_read_write - instrument atomic read-write access
      92             :  *
      93             :  * Instrument an atomic read-write access. The instrumentation should be
      94             :  * inserted before the actual write happens.
      95             :  *
      96             :  * @ptr address of access
      97             :  * @size size of access
      98             :  */
      99    27866747 : static __always_inline void instrument_atomic_read_write(const volatile void *v, size_t size)
     100             : {
     101    17340986 :         kasan_check_write(v, size);
     102    17288115 :         kcsan_check_atomic_read_write(v, size);
     103             : }
     104             : 
     105             : /**
     106             :  * instrument_copy_to_user - instrument reads of copy_to_user
     107             :  *
     108             :  * Instrument reads from kernel memory, that are due to copy_to_user (and
     109             :  * variants). The instrumentation must be inserted before the accesses.
     110             :  *
     111             :  * @to destination address
     112             :  * @from source address
     113             :  * @n number of bytes to copy
     114             :  */
     115             : static __always_inline void
     116      103698 : instrument_copy_to_user(void __user *to, const void *from, unsigned long n)
     117             : {
     118      103698 :         kasan_check_read(from, n);
     119      103703 :         kcsan_check_read(from, n);
     120             : }
     121             : 
     122             : /**
     123             :  * instrument_copy_from_user - instrument writes of copy_from_user
     124             :  *
     125             :  * Instrument writes to kernel memory, that are due to copy_from_user (and
     126             :  * variants). The instrumentation should be inserted before the accesses.
     127             :  *
     128             :  * @to destination address
     129             :  * @from source address
     130             :  * @n number of bytes to copy
     131             :  */
     132             : static __always_inline void
     133      201028 : instrument_copy_from_user(const void *to, const void __user *from, unsigned long n)
     134             : {
     135      201028 :         kasan_check_write(to, n);
     136      201027 :         kcsan_check_write(to, n);
     137             : }
     138             : 
     139             : #endif /* _LINUX_INSTRUMENTED_H */

Generated by: LCOV version 1.14