Lines Matching refs:addr

92 static bool addr_crosses_scale_boundary(vaddr_t addr, size_t size)  in addr_crosses_scale_boundary()  argument
94 return (addr >> ASAN_BLOCK_SHIFT) != in addr_crosses_scale_boundary()
95 ((addr + size - 1) >> ASAN_BLOCK_SHIFT); in addr_crosses_scale_boundary()
276 static void asan_report(vaddr_t addr, size_t size) in asan_report() argument
283 b = ROUNDDOWN(addr, ASAN_BLOCK_SIZE) - ASAN_BLOCK_SIZE * 2; in asan_report()
284 e = ROUNDDOWN(addr, ASAN_BLOCK_SIZE) + ASAN_BLOCK_SIZE * 2; in asan_report()
303 addr, size); in asan_report()
308 static __always_inline bool asan_shadow_1byte_isvalid(vaddr_t addr) in asan_shadow_1byte_isvalid() argument
310 int8_t last = (addr & ASAN_BLOCK_MASK) + 1; in asan_shadow_1byte_isvalid()
311 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_1byte_isvalid()
319 static __always_inline bool asan_shadow_2byte_isvalid(vaddr_t addr) in asan_shadow_2byte_isvalid() argument
321 if (addr_crosses_scale_boundary(addr, 2)) { in asan_shadow_2byte_isvalid()
322 return (asan_shadow_1byte_isvalid(addr) && in asan_shadow_2byte_isvalid()
323 asan_shadow_1byte_isvalid(addr + 1)); in asan_shadow_2byte_isvalid()
325 int8_t last = ((addr + 1) & ASAN_BLOCK_MASK) + 1; in asan_shadow_2byte_isvalid()
326 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_2byte_isvalid()
335 static __always_inline bool asan_shadow_4byte_isvalid(vaddr_t addr) in asan_shadow_4byte_isvalid() argument
337 if (addr_crosses_scale_boundary(addr, 4)) { in asan_shadow_4byte_isvalid()
338 return (asan_shadow_2byte_isvalid(addr) && in asan_shadow_4byte_isvalid()
339 asan_shadow_2byte_isvalid(addr + 2)); in asan_shadow_4byte_isvalid()
341 int8_t last = ((addr + 3) & ASAN_BLOCK_MASK) + 1; in asan_shadow_4byte_isvalid()
342 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_4byte_isvalid()
351 static __always_inline bool asan_shadow_8byte_isvalid(vaddr_t addr) in asan_shadow_8byte_isvalid() argument
353 if (addr_crosses_scale_boundary(addr, 8)) { in asan_shadow_8byte_isvalid()
354 return (asan_shadow_4byte_isvalid(addr) && in asan_shadow_8byte_isvalid()
355 asan_shadow_4byte_isvalid(addr + 4)); in asan_shadow_8byte_isvalid()
357 int8_t last = ((addr + 7) & ASAN_BLOCK_MASK) + 1; in asan_shadow_8byte_isvalid()
358 int8_t *byte = va_to_shadow((void *)addr); in asan_shadow_8byte_isvalid()
367 static __always_inline bool asan_shadow_Nbyte_isvalid(vaddr_t addr, in asan_shadow_Nbyte_isvalid() argument
373 if (!asan_shadow_1byte_isvalid(addr + i)) in asan_shadow_Nbyte_isvalid()
380 static __always_inline void check_access(vaddr_t addr, size_t size) in check_access() argument
383 void *begin = (void *)addr; in check_access()
384 void *end = (void *)(addr + size); in check_access()
402 valid = asan_shadow_1byte_isvalid(addr); in check_access()
405 valid = asan_shadow_2byte_isvalid(addr); in check_access()
408 valid = asan_shadow_4byte_isvalid(addr); in check_access()
411 valid = asan_shadow_8byte_isvalid(addr); in check_access()
414 valid = asan_shadow_Nbyte_isvalid(addr, size); in check_access()
418 valid = asan_shadow_Nbyte_isvalid(addr, size); in check_access()
422 asan_report(addr, size); in check_access()
425 static __always_inline void check_load(vaddr_t addr, size_t size) in check_load() argument
427 check_access(addr, size); in check_load()
430 static __always_inline void check_store(vaddr_t addr, size_t size) in check_store() argument
432 check_access(addr, size); in check_store()
435 static void __noreturn report_load(vaddr_t addr __unused, size_t size __unused) in report_load()
440 static void __noreturn report_store(vaddr_t addr __unused, size_t size __unused) in report_store()
448 void __asan_##type##size(vaddr_t addr); \
449 void __asan_##type##size(vaddr_t addr) \
450 { check_##type(addr, size); } \
451 void __asan_##type##size##_noabort(vaddr_t addr); \
452 void __asan_##type##size##_noabort(vaddr_t addr) \
453 { check_##type(addr, size); } \
454 void __asan_report_##type##size##_noabort(vaddr_t addr);\
455 void __noreturn __asan_report_##type##size##_noabort(vaddr_t addr) \
456 { report_##type(addr, size); }
469 void __asan_loadN_noabort(vaddr_t addr, size_t size);
470 void __asan_loadN_noabort(vaddr_t addr, size_t size) in __asan_loadN_noabort() argument
472 check_load(addr, size); in __asan_loadN_noabort()
475 void __asan_storeN_noabort(vaddr_t addr, size_t size);
476 void __asan_storeN_noabort(vaddr_t addr, size_t size) in __asan_storeN_noabort() argument
478 check_store(addr, size); in __asan_storeN_noabort()
481 void __asan_report_load_n_noabort(vaddr_t addr, size_t size);
482 void __noreturn __asan_report_load_n_noabort(vaddr_t addr, size_t size) in __asan_report_load_n_noabort() argument
484 report_load(addr, size); in __asan_report_load_n_noabort()
487 void __asan_report_store_n_noabort(vaddr_t addr, size_t size);
488 void __noreturn __asan_report_store_n_noabort(vaddr_t addr, size_t size) in __asan_report_store_n_noabort() argument
490 report_store(addr, size); in __asan_report_store_n_noabort()