summaryrefslogtreecommitdiff
path: root/kernel/kubsan.h
blob: 8f106241c8aafed5964c193b1888b9977447cf2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <typedefs.h>

enum { type_kind_int = 0, type_kind_float = 1, type_unknown = 0xffff };

struct type_descriptor {
  u16 type_kind;
  u16 type_info;
  char type_name[1];
};

struct source_location {
  const char *file_name;
  union {
    unsigned long reported;
    struct {
      u32 line;
      u32 column;
    };
  };
};

struct OverflowData {
  struct source_location location;
  struct type_descriptor *type;
};

struct type_mismatch_data {
  struct source_location location;
  struct type_descriptor *type;
  unsigned long alignment;
  unsigned char type_check_kind;
};

struct type_mismatch_data_v1 {
  struct source_location location;
  struct type_descriptor *type;
  unsigned char log_alignment;
  unsigned char type_check_kind;
};

struct type_mismatch_data_common {
  struct source_location *location;
  struct type_descriptor *type;
  unsigned long alignment;
  unsigned char type_check_kind;
};

struct nonnull_arg_data {
  struct source_location location;
  struct source_location attr_location;
  int arg_index;
};

struct OutOfBoundsData {
  struct source_location location;
  struct type_descriptor *array_type;
  struct type_descriptor *index_type;
};

struct ShiftOutOfBoundsData {
  struct source_location location;
  struct type_descriptor *lhs_type;
  struct type_descriptor *rhs_type;
};

struct unreachable_data {
  struct source_location location;
};

struct invalid_value_data {
  struct source_location location;
  struct type_descriptor *type;
};

struct alignment_assumption_data {
  struct source_location location;
  struct source_location assumption_location;
  struct type_descriptor *type;
};