Lines Matching refs:cache
140 void __kasan_cache_create(struct kmem_cache *cache, unsigned int *size, in __kasan_cache_create() argument
161 cache->kasan_info.alloc_meta_offset = *size; in __kasan_cache_create()
171 cache->kasan_info.alloc_meta_offset = 0; in __kasan_cache_create()
178 cache->kasan_info.free_meta_offset = KASAN_NO_FREE_META; in __kasan_cache_create()
192 if ((cache->flags & SLAB_TYPESAFE_BY_RCU) || cache->ctor || in __kasan_cache_create()
193 cache->object_size < sizeof(struct kasan_free_meta)) { in __kasan_cache_create()
196 cache->kasan_info.free_meta_offset = *size; in __kasan_cache_create()
201 cache->kasan_info.free_meta_offset = KASAN_NO_FREE_META; in __kasan_cache_create()
207 optimal_size = cache->object_size + optimal_redzone(cache->object_size); in __kasan_cache_create()
216 void __kasan_cache_create_kmalloc(struct kmem_cache *cache) in __kasan_cache_create_kmalloc() argument
218 cache->kasan_info.is_kmalloc = true; in __kasan_cache_create_kmalloc()
221 size_t __kasan_metadata_size(struct kmem_cache *cache) in __kasan_metadata_size() argument
225 return (cache->kasan_info.alloc_meta_offset ? in __kasan_metadata_size()
227 (cache->kasan_info.free_meta_offset ? in __kasan_metadata_size()
231 struct kasan_alloc_meta *kasan_get_alloc_meta(struct kmem_cache *cache, in kasan_get_alloc_meta() argument
234 if (!cache->kasan_info.alloc_meta_offset) in kasan_get_alloc_meta()
236 return kasan_reset_tag(object) + cache->kasan_info.alloc_meta_offset; in kasan_get_alloc_meta()
240 struct kasan_free_meta *kasan_get_free_meta(struct kmem_cache *cache, in kasan_get_free_meta() argument
244 if (cache->kasan_info.free_meta_offset == KASAN_NO_FREE_META) in kasan_get_free_meta()
246 return kasan_reset_tag(object) + cache->kasan_info.free_meta_offset; in kasan_get_free_meta()
260 void __kasan_unpoison_object_data(struct kmem_cache *cache, void *object) in __kasan_unpoison_object_data() argument
262 kasan_unpoison(object, cache->object_size, false); in __kasan_unpoison_object_data()
265 void __kasan_poison_object_data(struct kmem_cache *cache, void *object) in __kasan_poison_object_data() argument
267 kasan_poison(object, round_up(cache->object_size, KASAN_GRANULE_SIZE), in __kasan_poison_object_data()
285 static inline u8 assign_tag(struct kmem_cache *cache, in assign_tag() argument
295 if (!cache->ctor && !(cache->flags & SLAB_TYPESAFE_BY_RCU)) in assign_tag()
301 return (u8)obj_to_index(cache, virt_to_head_page(object), (void *)object); in assign_tag()
311 void * __must_check __kasan_init_slab_obj(struct kmem_cache *cache, in __kasan_init_slab_obj() argument
317 alloc_meta = kasan_get_alloc_meta(cache, object); in __kasan_init_slab_obj()
323 object = set_tag(object, assign_tag(cache, object, true)); in __kasan_init_slab_obj()
328 static inline bool ____kasan_slab_free(struct kmem_cache *cache, void *object, in ____kasan_slab_free() argument
344 if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) != in ____kasan_slab_free()
351 if (unlikely(cache->flags & SLAB_TYPESAFE_BY_RCU)) in ____kasan_slab_free()
359 kasan_poison(object, round_up(cache->object_size, KASAN_GRANULE_SIZE), in ____kasan_slab_free()
366 kasan_set_free_info(cache, object, tag); in ____kasan_slab_free()
368 return kasan_quarantine_put(cache, object); in ____kasan_slab_free()
371 bool __kasan_slab_free(struct kmem_cache *cache, void *object, in __kasan_slab_free() argument
374 return ____kasan_slab_free(cache, object, ip, true, init); in __kasan_slab_free()
423 static void set_alloc_info(struct kmem_cache *cache, void *object, in set_alloc_info() argument
429 if (cache->kasan_info.is_kmalloc && !is_kmalloc) in set_alloc_info()
432 alloc_meta = kasan_get_alloc_meta(cache, object); in set_alloc_info()
437 void * __must_check __kasan_slab_alloc(struct kmem_cache *cache, in __kasan_slab_alloc() argument
456 tag = assign_tag(cache, object, false); in __kasan_slab_alloc()
463 kasan_unpoison(tagged_object, cache->object_size, init); in __kasan_slab_alloc()
467 set_alloc_info(cache, (void *)object, flags, false); in __kasan_slab_alloc()
472 static inline void *____kasan_kmalloc(struct kmem_cache *cache, in ____kasan_kmalloc() argument
503 redzone_end = round_up((unsigned long)(object + cache->object_size), in ____kasan_kmalloc()
513 set_alloc_info(cache, (void *)object, flags, true); in ____kasan_kmalloc()
519 void * __must_check __kasan_kmalloc(struct kmem_cache *cache, const void *object, in __kasan_kmalloc() argument
522 return ____kasan_kmalloc(cache, object, size, flags); in __kasan_kmalloc()