linux/drivers/misc/lkdtm/lkdtm.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __LKDTM_H
   3#define __LKDTM_H
   4
   5#define pr_fmt(fmt) "lkdtm: " fmt
   6
   7#include <linux/kernel.h>
   8
   9extern char *lkdtm_kernel_info;
  10
  11#define pr_expected_config(kconfig)                             \
  12{                                                               \
  13        if (IS_ENABLED(kconfig))                                \
  14                pr_err("Unexpected! This %s was built with " #kconfig "=y\n", \
  15                        lkdtm_kernel_info);                     \
  16        else                                                    \
  17                pr_warn("This is probably expected, since this %s was built *without* " #kconfig "=y\n", \
  18                        lkdtm_kernel_info);                     \
  19}
  20
  21#ifndef MODULE
  22int lkdtm_check_bool_cmdline(const char *param);
  23#define pr_expected_config_param(kconfig, param)                \
  24{                                                               \
  25        if (IS_ENABLED(kconfig)) {                              \
  26                switch (lkdtm_check_bool_cmdline(param)) {      \
  27                case 0:                                         \
  28                        pr_warn("This is probably expected, since this %s was built with " #kconfig "=y but booted with '" param "=N'\n", \
  29                                lkdtm_kernel_info);             \
  30                        break;                                  \
  31                case 1:                                         \
  32                        pr_err("Unexpected! This %s was built with " #kconfig "=y and booted with '" param "=Y'\n", \
  33                                lkdtm_kernel_info);             \
  34                        break;                                  \
  35                default:                                        \
  36                        pr_err("Unexpected! This %s was built with " #kconfig "=y (and booted without '" param "' specified)\n", \
  37                                lkdtm_kernel_info);             \
  38                }                                               \
  39        } else {                                                \
  40                switch (lkdtm_check_bool_cmdline(param)) {      \
  41                case 0:                                         \
  42                        pr_warn("This is probably expected, as this %s was built *without* " #kconfig "=y and booted with '" param "=N'\n", \
  43                                lkdtm_kernel_info);             \
  44                        break;                                  \
  45                case 1:                                         \
  46                        pr_err("Unexpected! This %s was built *without* " #kconfig "=y but booted with '" param "=Y'\n", \
  47                                lkdtm_kernel_info);             \
  48                        break;                                  \
  49                default:                                        \
  50                        pr_err("This is probably expected, since this %s was built *without* " #kconfig "=y (and booted without '" param "' specified)\n", \
  51                                lkdtm_kernel_info);             \
  52                        break;                                  \
  53                }                                               \
  54        }                                                       \
  55}
  56#else
  57#define pr_expected_config_param(kconfig, param) pr_expected_config(kconfig)
  58#endif
  59
  60/* bugs.c */
  61void __init lkdtm_bugs_init(int *recur_param);
  62void lkdtm_PANIC(void);
  63void lkdtm_BUG(void);
  64void lkdtm_WARNING(void);
  65void lkdtm_WARNING_MESSAGE(void);
  66void lkdtm_EXCEPTION(void);
  67void lkdtm_LOOP(void);
  68void lkdtm_EXHAUST_STACK(void);
  69void lkdtm_CORRUPT_STACK(void);
  70void lkdtm_CORRUPT_STACK_STRONG(void);
  71void lkdtm_REPORT_STACK(void);
  72void lkdtm_UNALIGNED_LOAD_STORE_WRITE(void);
  73void lkdtm_SOFTLOCKUP(void);
  74void lkdtm_HARDLOCKUP(void);
  75void lkdtm_SPINLOCKUP(void);
  76void lkdtm_HUNG_TASK(void);
  77void lkdtm_OVERFLOW_SIGNED(void);
  78void lkdtm_OVERFLOW_UNSIGNED(void);
  79void lkdtm_ARRAY_BOUNDS(void);
  80void lkdtm_CORRUPT_LIST_ADD(void);
  81void lkdtm_CORRUPT_LIST_DEL(void);
  82void lkdtm_STACK_GUARD_PAGE_LEADING(void);
  83void lkdtm_STACK_GUARD_PAGE_TRAILING(void);
  84void lkdtm_UNSET_SMEP(void);
  85void lkdtm_DOUBLE_FAULT(void);
  86void lkdtm_CORRUPT_PAC(void);
  87
  88/* heap.c */
  89void __init lkdtm_heap_init(void);
  90void __exit lkdtm_heap_exit(void);
  91void lkdtm_VMALLOC_LINEAR_OVERFLOW(void);
  92void lkdtm_SLAB_LINEAR_OVERFLOW(void);
  93void lkdtm_WRITE_AFTER_FREE(void);
  94void lkdtm_READ_AFTER_FREE(void);
  95void lkdtm_WRITE_BUDDY_AFTER_FREE(void);
  96void lkdtm_READ_BUDDY_AFTER_FREE(void);
  97void lkdtm_SLAB_INIT_ON_ALLOC(void);
  98void lkdtm_BUDDY_INIT_ON_ALLOC(void);
  99void lkdtm_SLAB_FREE_DOUBLE(void);
 100void lkdtm_SLAB_FREE_CROSS(void);
 101void lkdtm_SLAB_FREE_PAGE(void);
 102
 103/* perms.c */
 104void __init lkdtm_perms_init(void);
 105void lkdtm_WRITE_RO(void);
 106void lkdtm_WRITE_RO_AFTER_INIT(void);
 107void lkdtm_WRITE_KERN(void);
 108void lkdtm_EXEC_DATA(void);
 109void lkdtm_EXEC_STACK(void);
 110void lkdtm_EXEC_KMALLOC(void);
 111void lkdtm_EXEC_VMALLOC(void);
 112void lkdtm_EXEC_RODATA(void);
 113void lkdtm_EXEC_USERSPACE(void);
 114void lkdtm_EXEC_NULL(void);
 115void lkdtm_ACCESS_USERSPACE(void);
 116void lkdtm_ACCESS_NULL(void);
 117
 118/* refcount.c */
 119void lkdtm_REFCOUNT_INC_OVERFLOW(void);
 120void lkdtm_REFCOUNT_ADD_OVERFLOW(void);
 121void lkdtm_REFCOUNT_INC_NOT_ZERO_OVERFLOW(void);
 122void lkdtm_REFCOUNT_ADD_NOT_ZERO_OVERFLOW(void);
 123void lkdtm_REFCOUNT_DEC_ZERO(void);
 124void lkdtm_REFCOUNT_DEC_NEGATIVE(void);
 125void lkdtm_REFCOUNT_DEC_AND_TEST_NEGATIVE(void);
 126void lkdtm_REFCOUNT_SUB_AND_TEST_NEGATIVE(void);
 127void lkdtm_REFCOUNT_INC_ZERO(void);
 128void lkdtm_REFCOUNT_ADD_ZERO(void);
 129void lkdtm_REFCOUNT_INC_SATURATED(void);
 130void lkdtm_REFCOUNT_DEC_SATURATED(void);
 131void lkdtm_REFCOUNT_ADD_SATURATED(void);
 132void lkdtm_REFCOUNT_INC_NOT_ZERO_SATURATED(void);
 133void lkdtm_REFCOUNT_ADD_NOT_ZERO_SATURATED(void);
 134void lkdtm_REFCOUNT_DEC_AND_TEST_SATURATED(void);
 135void lkdtm_REFCOUNT_SUB_AND_TEST_SATURATED(void);
 136void lkdtm_REFCOUNT_TIMING(void);
 137void lkdtm_ATOMIC_TIMING(void);
 138
 139/* rodata.c */
 140void lkdtm_rodata_do_nothing(void);
 141
 142/* usercopy.c */
 143void __init lkdtm_usercopy_init(void);
 144void __exit lkdtm_usercopy_exit(void);
 145void lkdtm_USERCOPY_HEAP_SIZE_TO(void);
 146void lkdtm_USERCOPY_HEAP_SIZE_FROM(void);
 147void lkdtm_USERCOPY_HEAP_WHITELIST_TO(void);
 148void lkdtm_USERCOPY_HEAP_WHITELIST_FROM(void);
 149void lkdtm_USERCOPY_STACK_FRAME_TO(void);
 150void lkdtm_USERCOPY_STACK_FRAME_FROM(void);
 151void lkdtm_USERCOPY_STACK_BEYOND(void);
 152void lkdtm_USERCOPY_KERNEL(void);
 153
 154/* stackleak.c */
 155void lkdtm_STACKLEAK_ERASING(void);
 156
 157/* cfi.c */
 158void lkdtm_CFI_FORWARD_PROTO(void);
 159
 160/* fortify.c */
 161void lkdtm_FORTIFIED_OBJECT(void);
 162void lkdtm_FORTIFIED_SUBOBJECT(void);
 163void lkdtm_FORTIFIED_STRSCPY(void);
 164
 165/* powerpc.c */
 166void lkdtm_PPC_SLB_MULTIHIT(void);
 167
 168#endif
 169