On Wed, 2 Nov 2016, Thomas Garnier wrote: > >> diff --git a/mm/slab.h b/mm/slab.h > >> index 9653f2e..58be647 100644 > >> --- a/mm/slab.h > >> +++ b/mm/slab.h > >> @@ -144,6 +144,9 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size, > >> > >> #define CACHE_CREATE_MASK (SLAB_CORE_FLAGS | SLAB_DEBUG_FLAGS | SLAB_CACHE_FLAGS) > >> > >> +/* Common allocator flags allowed for cache_create. */ > >> +#define SLAB_FLAGS_PERMITTED (CACHE_CREATE_MASK | SLAB_KASAN) > >> + > >> int __kmem_cache_shutdown(struct kmem_cache *); > >> void __kmem_cache_release(struct kmem_cache *); > >> int __kmem_cache_shrink(struct kmem_cache *, bool); > >> diff --git a/mm/slab_common.c b/mm/slab_common.c > >> index 71f0b28..01d067c 100644 > >> --- a/mm/slab_common.c > >> +++ b/mm/slab_common.c > >> @@ -329,6 +329,12 @@ static struct kmem_cache *create_cache(const char *name, > >> struct kmem_cache *s; > >> int err; > >> > >> + /* Do not allow allocator specific flags */ > >> + if (flags & ~SLAB_FLAGS_PERMITTED) { > >> + err = -EINVAL; > >> + goto out; > >> + } > >> + > > > > Why not just flags &= SLAB_FLAGS_PERMITTED if we're concerned about this > > like kmem_cache_create does &= CACHE_CREATE_MASK? > > > > Christoph on the first version advised removing invalid flags on the > caller and checking they are correct in kmem_cache_create. The memcg > path putting the wrong flags is through create_cache but I still used > this approach. > I think this is a rather trivial point since it doesn't matter if we clear invalid flags on the caller or in the callee and obviously kmem_cache_create() does it in the callee. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>