On 06/26/2018 02:15 PM, Andrey Konovalov wrote:
@@ -325,18 +341,41 @@ void kasan_init_slab_obj(struct kmem_cache *cache, const void *object)
void *kasan_slab_alloc(struct kmem_cache *cache, void *object, gfp_t flags)
{
- return kasan_kmalloc(cache, object, cache->object_size, flags);
+ object = kasan_kmalloc(cache, object, cache->object_size, flags);
+ if (IS_ENABLED(CONFIG_KASAN_HW) && unlikely(cache->ctor)) {
+ /*
+ * Cache constructor might use object's pointer value to
+ * initialize some of its fields.
+ */
+ cache->ctor(object);
This seams breaking the kmem_cache_create() contract: "The @ctor is run
when new pages are allocated by the cache."
(https://elixir.bootlin.com/linux/v3.7/source/mm/slab_common.c#L83)
Since there might be preexisting code relying on it, this could lead to
global side effects. Did you verify that this is not the case?
Another concern is performance related if we consider this solution
suitable for "near-production", since with the current implementation
you call the ctor (where present) on an object multiple times and this
ends up memsetting and repopulating the memory every time (i.e. inode.c:
inode_init_once). Do you know what is the performance impact?
--
Regards,
Vincenzo
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html