slab: make usercopy region 32-bit
authorAlexey Dobriyan <adobriyan@gmail.com>
Thu, 5 Apr 2018 23:21:31 +0000 (16:21 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Apr 2018 04:36:24 +0000 (21:36 -0700)
If kmem case sizes are 32-bit, then usecopy region should be too.

Link: http://lkml.kernel.org/r/20180305200730.15812-21-adobriyan@gmail.com
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Cc: David Miller <davem@davemloft.net>
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>
include/linux/slab.h
include/linux/slab_def.h
include/linux/slub_def.h
include/net/sock.h
mm/slab.h
mm/slab_common.c
mm/slub.c

index d36e8f0..04402c6 100644 (file)
@@ -143,7 +143,7 @@ struct kmem_cache *kmem_cache_create(const char *name, unsigned int size,
 struct kmem_cache *kmem_cache_create_usercopy(const char *name,
                        unsigned int size, unsigned int align,
                        slab_flags_t flags,
-                       size_t useroffset, size_t usersize,
+                       unsigned int useroffset, unsigned int usersize,
                        void (*ctor)(void *));
 void kmem_cache_destroy(struct kmem_cache *);
 int kmem_cache_shrink(struct kmem_cache *);
index 7385547..d9228e4 100644 (file)
@@ -85,8 +85,8 @@ struct kmem_cache {
        unsigned int *random_seq;
 #endif
 
-       size_t useroffset;              /* Usercopy region offset */
-       size_t usersize;                /* Usercopy region size */
+       unsigned int useroffset;        /* Usercopy region offset */
+       unsigned int usersize;          /* Usercopy region size */
 
        struct kmem_cache_node *node[MAX_NUMNODES];
 };
index bc02fd3..623d6ba 100644 (file)
@@ -137,8 +137,8 @@ struct kmem_cache {
        struct kasan_cache kasan_info;
 #endif
 
-       size_t useroffset;              /* Usercopy region offset */
-       size_t usersize;                /* Usercopy region size */
+       unsigned int useroffset;        /* Usercopy region offset */
+       unsigned int usersize;          /* Usercopy region size */
 
        struct kmem_cache_node *node[MAX_NUMNODES];
 };
index 49bd2c1..74d725f 100644 (file)
@@ -1114,8 +1114,8 @@ struct proto {
        struct kmem_cache       *slab;
        unsigned int            obj_size;
        slab_flags_t            slab_flags;
-       size_t                  useroffset;     /* Usercopy region offset */
-       size_t                  usersize;       /* Usercopy region size */
+       unsigned int            useroffset;     /* Usercopy region offset */
+       unsigned int            usersize;       /* Usercopy region size */
 
        struct percpu_counter   *orphan_count;
 
index 8f1072f..e8981e8 100644 (file)
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -22,8 +22,8 @@ struct kmem_cache {
        unsigned int size;      /* The aligned/padded/added on size  */
        unsigned int align;     /* Alignment as calculated */
        slab_flags_t flags;     /* Active flags on the slab */
-       size_t useroffset;      /* Usercopy region offset */
-       size_t usersize;        /* Usercopy region size */
+       unsigned int useroffset;/* Usercopy region offset */
+       unsigned int usersize;  /* Usercopy region size */
        const char *name;       /* Slab name for sysfs */
        int refcount;           /* Use counter */
        void (*ctor)(void *);   /* Called on object slot creation */
index 3e07b1f..01224cb 100644 (file)
@@ -380,8 +380,8 @@ struct kmem_cache *find_mergeable(unsigned int size, unsigned int align,
 
 static struct kmem_cache *create_cache(const char *name,
                unsigned int object_size, unsigned int size, unsigned int align,
-               slab_flags_t flags, size_t useroffset,
-               size_t usersize, void (*ctor)(void *),
+               slab_flags_t flags, unsigned int useroffset,
+               unsigned int usersize, void (*ctor)(void *),
                struct mem_cgroup *memcg, struct kmem_cache *root_cache)
 {
        struct kmem_cache *s;
@@ -454,7 +454,8 @@ out_free_cache:
 struct kmem_cache *
 kmem_cache_create_usercopy(const char *name,
                  unsigned int size, unsigned int align,
-                 slab_flags_t flags, size_t useroffset, size_t usersize,
+                 slab_flags_t flags,
+                 unsigned int useroffset, unsigned int usersize,
                  void (*ctor)(void *))
 {
        struct kmem_cache *s = NULL;
index dfead84..a10cf66 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5081,7 +5081,7 @@ SLAB_ATTR_RO(cache_dma);
 
 static ssize_t usersize_show(struct kmem_cache *s, char *buf)
 {
-       return sprintf(buf, "%zu\n", s->usersize);
+       return sprintf(buf, "%u\n", s->usersize);
 }
 SLAB_ATTR_RO(usersize);