Re: [PATCH v2 2/2] io_uring: Add KASAN support for alloc_caches

From: Jens Axboe
Date: Wed Feb 22 2023 - 13:30:25 EST


On 2/22/23 11:00?AM, Breno Leitao wrote:
> -static inline struct io_cache_entry *io_alloc_cache_get(struct io_alloc_cache *cache)
> +static inline struct io_cache_entry *io_alloc_cache_get(struct io_alloc_cache *cache,
> + size_t size)
> {
> if (cache->list.next) {
> struct io_cache_entry *entry;
> entry = container_of(cache->list.next, struct io_cache_entry, node);
> + kasan_unpoison_range(entry, size);
> cache->list.next = cache->list.next->next;
> return entry;
> }

Does this generate the same code if KASAN isn't enabled? Since there's a
4-byte hole in struct io_alloc_cache(), might be cleaner to simply add
the 'size' argument to io_alloc_cache_init() and store it in the cache.
Then the above just becomes:

kasan_unpoison_range(entry, cache->elem_size);

instead and that'd definitely generate the same code as before if KASAN
isn't enabled.

--
Jens Axboe