Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752206AbcKCAqL (ORCPT ); Wed, 2 Nov 2016 20:46:11 -0400 Received: from mail-pf0-f175.google.com ([209.85.192.175]:35823 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751190AbcKCAqJ (ORCPT ); Wed, 2 Nov 2016 20:46:09 -0400 Date: Wed, 2 Nov 2016 17:46:07 -0700 (PDT) From: David Rientjes X-X-Sender: rientjes@chino.kir.corp.google.com To: Thomas Garnier cc: Christoph Lameter , Pekka Enberg , Joonsoo Kim , Andrew Morton , Linux-MM , LKML , Greg Thelen , Vladimir Davydov , Michal Hocko Subject: Re: [PATCH v2] memcg: Prevent memcg caches to be both OFF_SLAB & OBJFREELIST_SLAB In-Reply-To: Message-ID: References: <1477939010-111710-1-git-send-email-thgarnie@google.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1685 Lines: 44 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.