summaryrefslogtreecommitdiffstats
path: root/mm/slab_common.c
diff options
context:
space:
mode:
authorThomas Garnier <thgarnie@google.com>2016-12-13 01:41:38 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2016-12-13 03:55:06 +0100
commite70954fd6d4b469517fd906ef1c33310e90ef9f0 (patch)
tree478865ae45175903b641683eae5ca8991bd81fa3 /mm/slab_common.c
parentslub: avoid false-postive warning (diff)
downloadlinux-e70954fd6d4b469517fd906ef1c33310e90ef9f0.tar.xz
linux-e70954fd6d4b469517fd906ef1c33310e90ef9f0.zip
mm/slab_common.c: check kmem_create_cache flags are common
Verify that kmem_create_cache flags are not allocator specific. It is done before removing flags that are not available with the current configuration. The current kmem_cache_create removes incorrect flags but do not validate the callers are using them right. This change will ensure that callers are not trying to create caches with flags that won't be used because allocator specific. Link: http://lkml.kernel.org/r/1478553075-120242-2-git-send-email-thgarnie@google.com Signed-off-by: Thomas Garnier <thgarnie@google.com> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/slab_common.c')
-rw-r--r--mm/slab_common.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/slab_common.c b/mm/slab_common.c
index 5d2f24fbafc5..ae323841adb1 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -404,6 +404,12 @@ kmem_cache_create(const char *name, size_t size, size_t align,
goto out_unlock;
}
+ /* Refuse requests with allocator specific flags */
+ if (flags & ~SLAB_FLAGS_PERMITTED) {
+ err = -EINVAL;
+ goto out_unlock;
+ }
+
/*
* Some allocators will constraint the set of valid flags to a subset
* of all flags. We expect them to define CACHE_CREATE_MASK in this