Lines Matching refs:addr

49 static bool addr_crosses_scale_boundary(vaddr_t addr, size_t size)  in addr_crosses_scale_boundary()  argument
51 return (addr >> ASAN_BLOCK_SHIFT) != in addr_crosses_scale_boundary()
52 ((addr + size - 1) >> ASAN_BLOCK_SHIFT); in addr_crosses_scale_boundary()
189 static void asan_report(vaddr_t addr, size_t size) in asan_report() argument
196 b = ROUNDDOWN(addr, ASAN_BLOCK_SIZE) - ASAN_BLOCK_SIZE; in asan_report()
197 e = ROUNDDOWN(addr, ASAN_BLOCK_SIZE) + ASAN_BLOCK_SIZE; in asan_report()
216 addr, size); in asan_report()
221 static __always_inline bool asan_shadow_1byte_isvalid(vaddr_t addr) in asan_shadow_1byte_isvalid() argument
223 int8_t last = (addr & ASAN_BLOCK_MASK) + 1; in asan_shadow_1byte_isvalid()
224 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_1byte_isvalid()
232 static __always_inline bool asan_shadow_2byte_isvalid(vaddr_t addr) in asan_shadow_2byte_isvalid() argument
234 if (addr_crosses_scale_boundary(addr, 2)) { in asan_shadow_2byte_isvalid()
235 return (asan_shadow_1byte_isvalid(addr) && in asan_shadow_2byte_isvalid()
236 asan_shadow_1byte_isvalid(addr + 1)); in asan_shadow_2byte_isvalid()
238 int8_t last = ((addr + 1) & ASAN_BLOCK_MASK) + 1; in asan_shadow_2byte_isvalid()
239 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_2byte_isvalid()
248 static __always_inline bool asan_shadow_4byte_isvalid(vaddr_t addr) in asan_shadow_4byte_isvalid() argument
250 if (addr_crosses_scale_boundary(addr, 4)) { in asan_shadow_4byte_isvalid()
251 return (asan_shadow_2byte_isvalid(addr) && in asan_shadow_4byte_isvalid()
252 asan_shadow_2byte_isvalid(addr + 2)); in asan_shadow_4byte_isvalid()
254 int8_t last = ((addr + 3) & ASAN_BLOCK_MASK) + 1; in asan_shadow_4byte_isvalid()
255 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_4byte_isvalid()
264 static __always_inline bool asan_shadow_8byte_isvalid(vaddr_t addr) in asan_shadow_8byte_isvalid() argument
266 if (addr_crosses_scale_boundary(addr, 8)) { in asan_shadow_8byte_isvalid()
267 return (asan_shadow_4byte_isvalid(addr) && in asan_shadow_8byte_isvalid()
268 asan_shadow_4byte_isvalid(addr + 4)); in asan_shadow_8byte_isvalid()
270 int8_t last = ((addr + 7) & ASAN_BLOCK_MASK) + 1; in asan_shadow_8byte_isvalid()
271 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_8byte_isvalid()
280 static __always_inline bool asan_shadow_Nbyte_isvalid(vaddr_t addr, in asan_shadow_Nbyte_isvalid() argument
286 if (!asan_shadow_1byte_isvalid(addr + i)) in asan_shadow_Nbyte_isvalid()
293 static __always_inline void check_access(vaddr_t addr, size_t size) in check_access() argument
296 void *begin = (void *)addr; in check_access()
297 void *end = (void *)(addr + size); in check_access()
315 valid = asan_shadow_1byte_isvalid(addr); in check_access()
318 valid = asan_shadow_2byte_isvalid(addr); in check_access()
321 valid = asan_shadow_4byte_isvalid(addr); in check_access()
324 valid = asan_shadow_8byte_isvalid(addr); in check_access()
327 valid = asan_shadow_Nbyte_isvalid(addr, size); in check_access()
331 valid = asan_shadow_Nbyte_isvalid(addr, size); in check_access()
335 asan_report(addr, size); in check_access()
338 static __always_inline void check_load(vaddr_t addr, size_t size) in check_load() argument
340 check_access(addr, size); in check_load()
343 static __always_inline void check_store(vaddr_t addr, size_t size) in check_store() argument
345 check_access(addr, size); in check_store()
348 static void __noreturn report_load(vaddr_t addr __unused, size_t size __unused) in report_load()
353 static void __noreturn report_store(vaddr_t addr __unused, size_t size __unused) in report_store()
361 void __asan_##type##size(vaddr_t addr); \
362 void __asan_##type##size(vaddr_t addr) \
363 { check_##type(addr, size); } \
364 void __asan_##type##size##_noabort(vaddr_t addr); \
365 void __asan_##type##size##_noabort(vaddr_t addr) \
366 { check_##type(addr, size); } \
367 void __asan_report_##type##size##_noabort(vaddr_t addr);\
368 void __noreturn __asan_report_##type##size##_noabort(vaddr_t addr) \
369 { report_##type(addr, size); }
382 void __asan_loadN_noabort(vaddr_t addr, size_t size);
383 void __asan_loadN_noabort(vaddr_t addr, size_t size) in __asan_loadN_noabort() argument
385 check_load(addr, size); in __asan_loadN_noabort()
388 void __asan_storeN_noabort(vaddr_t addr, size_t size);
389 void __asan_storeN_noabort(vaddr_t addr, size_t size) in __asan_storeN_noabort() argument
391 check_store(addr, size); in __asan_storeN_noabort()
394 void __asan_report_load_n_noabort(vaddr_t addr, size_t size);
395 void __noreturn __asan_report_load_n_noabort(vaddr_t addr, size_t size) in __asan_report_load_n_noabort() argument
397 report_load(addr, size); in __asan_report_load_n_noabort()
400 void __asan_report_store_n_noabort(vaddr_t addr, size_t size);
401 void __noreturn __asan_report_store_n_noabort(vaddr_t addr, size_t size) in __asan_report_store_n_noabort() argument
403 report_store(addr, size); in __asan_report_store_n_noabort()