Lines Matching refs:addr
49 static __always_inline bool memory_is_poisoned_1(unsigned long addr)
51 s8 shadow_value = *(s8 *)kasan_mem_to_shadow((void *)addr);
54 s8 last_accessible_byte = addr & KASAN_SHADOW_MASK;
61 static __always_inline bool memory_is_poisoned_2_4_8(unsigned long addr,
64 u8 *shadow_addr = (u8 *)kasan_mem_to_shadow((void *)addr);
70 if (unlikely(((addr + size - 1) & KASAN_SHADOW_MASK) < size - 1))
71 return *shadow_addr || memory_is_poisoned_1(addr + size - 1);
73 return memory_is_poisoned_1(addr + size - 1);
76 static __always_inline bool memory_is_poisoned_16(unsigned long addr)
78 u16 *shadow_addr = (u16 *)kasan_mem_to_shadow((void *)addr);
81 if (unlikely(!IS_ALIGNED(addr, KASAN_SHADOW_SCALE_SIZE)))
82 return *shadow_addr || memory_is_poisoned_1(addr + 15);
129 static __always_inline bool memory_is_poisoned_n(unsigned long addr,
134 ret = memory_is_nonzero(kasan_mem_to_shadow((void *)addr),
135 kasan_mem_to_shadow((void *)addr + size - 1) + 1);
138 unsigned long last_byte = addr + size - 1;
148 static __always_inline bool memory_is_poisoned(unsigned long addr, size_t size)
153 return memory_is_poisoned_1(addr);
157 return memory_is_poisoned_2_4_8(addr, size);
159 return memory_is_poisoned_16(addr);
165 return memory_is_poisoned_n(addr, size);
168 static __always_inline bool check_memory_region_inline(unsigned long addr,
175 if (unlikely(addr + size < addr))
176 return !kasan_report(addr, size, write, ret_ip);
179 if (unlikely((void *)addr <
181 return !kasan_report(addr, size, write, ret_ip);
184 if (unlikely(kasan_mem_to_shadow((void *)addr) == NULL)) {
185 return !kasan_report(addr, size, write, ret_ip);
189 if (likely(!memory_is_poisoned(addr, size)))
192 return !kasan_report(addr, size, write, ret_ip);
195 bool check_memory_region(unsigned long addr, size_t size, bool write,
198 return check_memory_region_inline(addr, size, write, ret_ip);
238 void __asan_load##size(unsigned long addr) \
240 check_memory_region_inline(addr, size, false, _RET_IP_);\
246 void __asan_store##size(unsigned long addr) \
248 check_memory_region_inline(addr, size, true, _RET_IP_); \
261 void __asan_loadN(unsigned long addr, size_t size)
263 check_memory_region(addr, size, false, _RET_IP_);
271 void __asan_storeN(unsigned long addr, size_t size)
273 check_memory_region(addr, size, true, _RET_IP_);
286 void __asan_alloca_poison(unsigned long addr, size_t size)
293 const void *left_redzone = (const void *)(addr -
295 const void *right_redzone = (const void *)(addr + rounded_up_size);
297 WARN_ON(!IS_ALIGNED(addr, KASAN_ALLOCA_REDZONE_SIZE));
299 kasan_unpoison_shadow((const void *)(addr + rounded_down_size),
321 void __asan_set_shadow_##byte(const void *addr, size_t size) \
323 __memset((void *)addr, 0x##byte, size); \
334 void kasan_record_aux_stack(void *addr)
336 struct page *page = kasan_addr_to_page(addr);
345 object = nearest_obj(cache, page, addr);