Lines Matching +full:mtd +full:- +full:name
4 * Copyright (c) 2019-2020 Maxime Villard, m00nbsd.net
68 /* -------------------------------------------------------------------------- */
91 /* -------------------------------------------------------------------------- */
114 * Avoid clobbering any thread-local state before we panic.
150 /* -------------------------------------------------------------------------- */
183 (curthread->td_pflags2 & TDP2_SAN_QUIET) != 0)) in kmsan_report_hook()
203 } else if (__builtin_memcmp((void *)ptr, "----", 4) == 0) { in kmsan_report_hook()
205 * The format of the string is: "----var@function". Parse it to in kmsan_report_hook()
239 (curthread->td_pflags2 & TDP2_SAN_QUIET) != 0)) in kmsan_report_inline()
257 } else if (__builtin_memcmp((void *)ptr, "----", 4) == 0) { in kmsan_report_inline()
259 * The format of the string is: "----var@function". Parse it to in kmsan_report_inline()
278 /* -------------------------------------------------------------------------- */
314 size += ((uintptr_t)orig & (sizeof(*orig) - 1)); in kmsan_origin_fill()
394 msan_td_t *mtd; in kmsan_init_arg() local
401 mtd = curthread->td_kmsan; in kmsan_init_arg()
402 arg = mtd->tls[mtd->ctx].param_shadow; in kmsan_init_arg()
409 msan_td_t *mtd; in kmsan_init_ret() local
416 mtd = curthread->td_kmsan; in kmsan_init_ret()
417 arg = mtd->tls[mtd->ctx].retval_shadow; in kmsan_init_ret()
425 msan_td_t *mtd; in kmsan_check_arg() local
433 mtd = curthread->td_kmsan; in kmsan_check_arg()
434 ctx = mtd->ctx; in kmsan_check_arg()
435 arg = mtd->tls[ctx].param_shadow; in kmsan_check_arg()
440 orig = &mtd->tls[ctx].param_origin[i / sizeof(msan_orig_t)]; in kmsan_check_arg()
449 msan_td_t *mtd; in kmsan_thread_alloc() local
454 mtd = td->td_kmsan; in kmsan_thread_alloc()
455 if (mtd == NULL) { in kmsan_thread_alloc()
459 mtd = malloc(sizeof(*mtd), M_KMSAN, M_WAITOK); in kmsan_thread_alloc()
461 __builtin_memset(mtd, 0, sizeof(*mtd)); in kmsan_thread_alloc()
462 mtd->ctx = 0; in kmsan_thread_alloc()
464 if (td->td_kstack != 0) in kmsan_thread_alloc()
465 kmsan_mark((void *)td->td_kstack, ptoa(td->td_kstack_pages), in kmsan_thread_alloc()
468 td->td_kmsan = mtd; in kmsan_thread_alloc()
474 msan_td_t *mtd; in kmsan_thread_free() local
481 mtd = td->td_kmsan; in kmsan_thread_free()
483 free(mtd, M_KMSAN); in kmsan_thread_free()
484 td->td_kmsan = NULL; in kmsan_thread_free()
493 msan_td_t *mtd; in kmsan_intr_enter() local
498 mtd = curthread->td_kmsan; in kmsan_intr_enter()
499 mtd->ctx++; in kmsan_intr_enter()
500 if (__predict_false(mtd->ctx >= MSAN_NCONTEXT)) in kmsan_intr_enter()
501 kmsan_panic("%s: mtd->ctx = %zu", __func__, mtd->ctx); in kmsan_intr_enter()
507 msan_td_t *mtd; in kmsan_intr_leave() local
512 mtd = curthread->td_kmsan; in kmsan_intr_leave()
513 if (__predict_false(mtd->ctx == 0)) in kmsan_intr_leave()
514 kmsan_panic("%s: mtd->ctx = %zu", __func__, mtd->ctx); in kmsan_intr_leave()
515 mtd->ctx--; in kmsan_intr_leave()
518 /* -------------------------------------------------------------------------- */
563 kmsan_mark(bp->bio_data, bp->bio_length, c); in kmsan_mark_bio()
570 if ((m->m_flags & M_EXTPG) == 0) in kmsan_mark_mbuf()
571 kmsan_mark(m->m_data, m->m_len, c); in kmsan_mark_mbuf()
572 m = m->m_next; in kmsan_mark_mbuf()
585 kmsan_shadow_check((uintptr_t)bp->bio_data, bp->bio_length, descr); in kmsan_check_bio()
592 kmsan_shadow_check((uintptr_t)mtod(m, void *), m->m_len, descr); in kmsan_check_mbuf()
593 } while ((m = m->m_next) != NULL); in kmsan_check_mbuf()
599 for (int i = 0; i < uio->uio_iovcnt; i++) { in kmsan_check_uio()
600 kmsan_check(uio->uio_iov[i].iov_base, uio->uio_iov[i].iov_len, in kmsan_check_uio()
623 /* -------------------------------------------------------------------------- */
717 msan_td_t *mtd; in __msan_get_context_state() local
725 mtd = curthread->td_kmsan; in __msan_get_context_state()
726 return (&mtd->tls[mtd->ctx]); in __msan_get_context_state()
729 /* -------------------------------------------------------------------------- */
763 return (*_b1 - *_b2); in kmsan_memcmp()
842 return (*(const unsigned char *)s1 - *(const unsigned char *)s2); in kmsan_strcmp()
859 kmsan_shadow_check((uintptr_t)str, (size_t)(s - str) + 1, "strlen():arg1"); in kmsan_strlen()
861 return (s - str); in kmsan_strlen()
911 /* -------------------------------------------------------------------------- */
1062 /* -------------------------------------------------------------------------- */
1067 #define _MSAN_ATOMIC_FUNC_ADD(name, type) \ argument
1068 void kmsan_atomic_add_##name(volatile type *ptr, type val) \
1071 "atomic_add_" #name "():args"); \
1073 "atomic_add_" #name "():ptr"); \
1074 atomic_add_##name(ptr, val); \
1077 #define MSAN_ATOMIC_FUNC_ADD(name, type) \ argument
1078 _MSAN_ATOMIC_FUNC_ADD(name, type) \
1079 _MSAN_ATOMIC_FUNC_ADD(acq_##name, type) \
1080 _MSAN_ATOMIC_FUNC_ADD(rel_##name, type)
1082 #define _MSAN_ATOMIC_FUNC_SUBTRACT(name, type) \ argument
1083 void kmsan_atomic_subtract_##name(volatile type *ptr, type val) \
1086 "atomic_subtract_" #name "():args"); \
1088 "atomic_subtract_" #name "():ptr"); \
1089 atomic_subtract_##name(ptr, val); \
1092 #define MSAN_ATOMIC_FUNC_SUBTRACT(name, type) \ argument
1093 _MSAN_ATOMIC_FUNC_SUBTRACT(name, type) \
1094 _MSAN_ATOMIC_FUNC_SUBTRACT(acq_##name, type) \
1095 _MSAN_ATOMIC_FUNC_SUBTRACT(rel_##name, type)
1097 #define _MSAN_ATOMIC_FUNC_SET(name, type) \ argument
1098 void kmsan_atomic_set_##name(volatile type *ptr, type val) \
1101 "atomic_set_" #name "():args"); \
1103 "atomic_set_" #name "():ptr"); \
1104 atomic_set_##name(ptr, val); \
1107 #define MSAN_ATOMIC_FUNC_SET(name, type) \ argument
1108 _MSAN_ATOMIC_FUNC_SET(name, type) \
1109 _MSAN_ATOMIC_FUNC_SET(acq_##name, type) \
1110 _MSAN_ATOMIC_FUNC_SET(rel_##name, type)
1112 #define _MSAN_ATOMIC_FUNC_CLEAR(name, type) \ argument
1113 void kmsan_atomic_clear_##name(volatile type *ptr, type val) \
1116 "atomic_clear_" #name "():args"); \
1118 "atomic_clear_" #name "():ptr"); \
1119 atomic_clear_##name(ptr, val); \
1122 #define MSAN_ATOMIC_FUNC_CLEAR(name, type) \ argument
1123 _MSAN_ATOMIC_FUNC_CLEAR(name, type) \
1124 _MSAN_ATOMIC_FUNC_CLEAR(acq_##name, type) \
1125 _MSAN_ATOMIC_FUNC_CLEAR(rel_##name, type)
1127 #define MSAN_ATOMIC_FUNC_FETCHADD(name, type) \ argument
1128 type kmsan_atomic_fetchadd_##name(volatile type *ptr, type val) \
1131 "atomic_fetchadd_" #name "():args"); \
1133 "atomic_fetchadd_" #name "():ptr"); \
1135 return (atomic_fetchadd_##name(ptr, val)); \
1138 #define MSAN_ATOMIC_FUNC_READANDCLEAR(name, type) \ argument
1139 type kmsan_atomic_readandclear_##name(volatile type *ptr) \
1142 "atomic_readandclear_" #name "():args"); \
1144 "atomic_readandclear_" #name "():ptr"); \
1146 return (atomic_readandclear_##name(ptr)); \
1149 #define MSAN_ATOMIC_FUNC_TESTANDCLEAR(name, type) \ argument
1150 int kmsan_atomic_testandclear_##name(volatile type *ptr, u_int v) \
1153 "atomic_testandclear_" #name "():args"); \
1155 "atomic_testandclear_" #name "():ptr"); \
1157 return (atomic_testandclear_##name(ptr, v)); \
1160 #define MSAN_ATOMIC_FUNC_TESTANDSET(name, type) \ argument
1161 int kmsan_atomic_testandset_##name(volatile type *ptr, u_int v) \
1164 "atomic_testandset_" #name "():args"); \
1166 "atomic_testandset_" #name "():ptr"); \
1168 return (atomic_testandset_##name(ptr, v)); \
1171 #define MSAN_ATOMIC_FUNC_SWAP(name, type) \ argument
1172 type kmsan_atomic_swap_##name(volatile type *ptr, type val) \
1175 "atomic_swap_" #name "():args"); \
1177 "atomic_swap_" #name "():ptr"); \
1179 return (atomic_swap_##name(ptr, val)); \
1182 #define _MSAN_ATOMIC_FUNC_CMPSET(name, type) \ argument
1183 int kmsan_atomic_cmpset_##name(volatile type *ptr, type oval, \
1187 sizeof(nval), "atomic_cmpset_" #name "():args"); \
1189 "atomic_cmpset_" #name "():ptr"); \
1191 return (atomic_cmpset_##name(ptr, oval, nval)); \
1194 #define MSAN_ATOMIC_FUNC_CMPSET(name, type) \ argument
1195 _MSAN_ATOMIC_FUNC_CMPSET(name, type) \
1196 _MSAN_ATOMIC_FUNC_CMPSET(acq_##name, type) \
1197 _MSAN_ATOMIC_FUNC_CMPSET(rel_##name, type)
1199 #define _MSAN_ATOMIC_FUNC_FCMPSET(name, type) \ argument
1200 int kmsan_atomic_fcmpset_##name(volatile type *ptr, type *oval, \
1204 sizeof(nval), "atomic_fcmpset_" #name "():args"); \
1206 "atomic_fcmpset_" #name "():ptr"); \
1208 return (atomic_fcmpset_##name(ptr, oval, nval)); \
1211 #define MSAN_ATOMIC_FUNC_FCMPSET(name, type) \ argument
1212 _MSAN_ATOMIC_FUNC_FCMPSET(name, type) \
1213 _MSAN_ATOMIC_FUNC_FCMPSET(acq_##name, type) \
1214 _MSAN_ATOMIC_FUNC_FCMPSET(rel_##name, type)
1216 #define MSAN_ATOMIC_FUNC_THREAD_FENCE(name) \ argument
1217 void kmsan_atomic_thread_fence_##name(void) \
1219 atomic_thread_fence_##name(); \
1222 #define _MSAN_ATOMIC_FUNC_LOAD(name, type) \ argument
1223 type kmsan_atomic_load_##name(const volatile type *ptr) \
1226 "atomic_load_" #name "():args"); \
1228 "atomic_load_" #name "():ptr"); \
1230 return (atomic_load_##name(ptr)); \
1233 #define MSAN_ATOMIC_FUNC_LOAD(name, type) \ argument
1234 _MSAN_ATOMIC_FUNC_LOAD(name, type) \
1235 _MSAN_ATOMIC_FUNC_LOAD(acq_##name, type)
1237 #define _MSAN_ATOMIC_FUNC_STORE(name, type) \ argument
1238 void kmsan_atomic_store_##name(volatile type *ptr, type val) \
1241 "atomic_store_" #name "():args"); \
1244 atomic_store_##name(ptr, val); \
1247 #define MSAN_ATOMIC_FUNC_STORE(name, type) \ argument
1248 _MSAN_ATOMIC_FUNC_STORE(name, type) \
1249 _MSAN_ATOMIC_FUNC_STORE(rel_##name, type)
1361 /* -------------------------------------------------------------------------- */
1549 /* -------------------------------------------------------------------------- */
1562 switch (desc->md_type) { in kmsan_bus_dmamap_sync()
1564 kmsan_check(desc->u.md_vaddr, desc->md_len, in kmsan_bus_dmamap_sync()
1568 kmsan_check_mbuf(desc->u.md_mbuf, "dmasync"); in kmsan_bus_dmamap_sync()
1574 desc->md_type); in kmsan_bus_dmamap_sync()
1578 switch (desc->md_type) { in kmsan_bus_dmamap_sync()
1580 kmsan_mark(desc->u.md_vaddr, desc->md_len, in kmsan_bus_dmamap_sync()
1584 kmsan_mark_mbuf(desc->u.md_mbuf, KMSAN_STATE_INITED); in kmsan_bus_dmamap_sync()
1590 desc->md_type); in kmsan_bus_dmamap_sync()