Loading...
Searching...
No Matches
Go to the documentation of this file.
32#ifndef __BORDOISILA_PTR_H__
33#define __BORDOISILA_PTR_H__
39#ifndef __BORDOISILA_PTR_MIN
40#define __BORDOISILA_PTR_MIN 0x10000ULL
42#ifndef __BORDOISILA_PTR_USER_MAX
43#define __BORDOISILA_PTR_USER_MAX 0x0000FFFFFFFFFFFFULL
52#ifndef __BORDOISILA_PTR_PHYS_BASE
53#define __BORDOISILA_PTR_PHYS_BASE 0xFFFF800000000000ULL
55#ifndef __BORDOISILA_PTR_KIMG_BASE
56#define __BORDOISILA_PTR_KIMG_BASE 0xFFFFC00000000000ULL
58#ifndef __BORDOISILA_PTR_HEAP_BASE
59#define __BORDOISILA_PTR_HEAP_BASE 0xFFFFE00000000000ULL
61#ifndef __BORDOISILA_PTR_HEAP_END
62#define __BORDOISILA_PTR_HEAP_END 0xFFFFFF1000000000ULL
64#ifndef __BORDOISILA_PTR_KERN_MAX
65#define __BORDOISILA_PTR_KERN_MAX 0xFFFFFFFFFFFFEFFFULL
67#define __BORDOISILA_PTR_KERN_MIN __BORDOISILA_PTR_PHYS_BASE
69#define __BORDOISILA_PTR_REPEATED_BYTE(v) \
70 ((uint64_t)(v) == (((uint64_t)(v) & 0xFFULL) * 0x0101010101010101ULL))
72#define __BORDOISILA_PTR_REPEATED_WORD(v) \
73 ((((uint64_t)(v) >> 32) == ((uint64_t)(v) & 0xFFFFFFFFULL)) || \
74 (((uint64_t)(v) & 0xFFFFFFFFULL) == 0xFFFFFFFFULL))
76#define __BORDOISILA_PTR_POISONED(v) \
77 ((uint64_t)(v) == 0xDEADBEEFDEADBEEFULL || (uint64_t)(v) == 0xDEADDEADDEADDEADULL || \
78 (uint64_t)(v) == 0xBAADF00DBAADF00DULL || (uint64_t)(v) == 0xFEEEFEEEFEEEFEEEULL || \
79 (uint64_t)(v) == 0xDEADBEEFULL || (uint64_t)(v) == 0xBAADF00DULL)
81#define __BORDOISILA_PTR_VALIDATE(p) \
83 uint64_t _v = (uint64_t)(uintptr_t)(p); \
84 (_v >= __BORDOISILA_PTR_MIN) && !__BORDOISILA_PTR_REPEATED_BYTE(_v) && \
85 !__BORDOISILA_PTR_REPEATED_WORD(_v) && !__BORDOISILA_PTR_POISONED(_v) && \
86 ((_v <= __BORDOISILA_PTR_USER_MAX) || \
87 (_v >= __BORDOISILA_PTR_KERN_MIN && _v <= __BORDOISILA_PTR_KERN_MAX)); \
90#define __BORDOISILA_HEAP_PTR_VALIDATE(p) \
92 uint64_t _h = (uint64_t)(uintptr_t)(p); \
93 __BORDOISILA_PTR_OK(_h) && \
94 _h >= __BORDOISILA_PTR_HEAP_BASE&& _h < __BORDOISILA_PTR_HEAP_END; \
97#define __BORDOISILA_PHYS_PTR_VALIDATE(p) \
99 uint64_t _f = (uint64_t)(uintptr_t)(p); \
100 __BORDOISILA_PTR_VALIDATE(_f) && \
101 _f >= __BORDOISILA_PTR_PHYS_BASE&& _f < __BORDOISILA_PTR_KIMG_BASE; \
104#define __BORDOISILA_KE_IMAGE_PTR_VALIDATE(p) \
106 uint64_t _i = (uint64_t)(uintptr_t)(p); \
107 __BORDOISILA_PTR_VALIDATE(_i) && \
108 _i >= __BORDOISILA_PTR_KIMG_BASE&& _i < __BORDOISILA_PTR_HEAP_BASE; \
111#define __BORDOISILA_KE_PTR_VALIDATE(p) \
113 uint64_t _k = (uint64_t)(uintptr_t)(p); \
114 __BORDOISILA_HEAP_PTR_VALIDATE(_k) || __BORDOISILA_PHYS_PTR_VALIDATE(_k) || \
115 __BORDOISILA_KIMG_PTR_VALIDATE(_k); \
119#define __BORDOISILA_UPTR_VALIDATE(p) \
121 uint64_t _u = (uint64_t)(uintptr_t)(p); \
122 __BORDOISILA_PTR_VALIDATE(_u) && _u <= __BORDOISILA_PTR_USER_MAX; \
126#define __BORDOISILA_UBUF_VALIDATE(p, len) \
128 uint64_t _bp = (uint64_t)(uintptr_t)(p); \
129 uint64_t _bl = (uint64_t)(len); \
130 __BORDOISILA_UPTR_VALIDATE(_bp) && _bl <= (__BORDOISILA_PTR_USER_MAX - _bp + 1ULL); \
133#define __BORDOISILA_PTR_VALIDATE_ALIGNED(p, align) \
134 (__BORDOISILA_PTR_VALIDATE(p) && (((uintptr_t)(p) & ((align) - 1)) == 0))
136#define __BORDOISILA_RETURN_ON_BADPTR(p, ret) \
138 if (!__BORDOISILA_PTR_VALIDATE(p)) \
141#define __BORDOISILA_CONTINUE_IF_BADPTR(p) \
142 if (!__BORDOISILA_PTR_VALIDATE(p)) \