0001
0002
0003
0004
0005
0006
0007 #include <linux/slab.h>
0008
0009 #include <linux/mm.h>
0010 #include <linux/poison.h>
0011 #include <linux/interrupt.h>
0012 #include <linux/memory.h>
0013 #include <linux/cache.h>
0014 #include <linux/compiler.h>
0015 #include <linux/kfence.h>
0016 #include <linux/module.h>
0017 #include <linux/cpu.h>
0018 #include <linux/uaccess.h>
0019 #include <linux/seq_file.h>
0020 #include <linux/proc_fs.h>
0021 #include <linux/debugfs.h>
0022 #include <linux/kasan.h>
0023 #include <asm/cacheflush.h>
0024 #include <asm/tlbflush.h>
0025 #include <asm/page.h>
0026 #include <linux/memcontrol.h>
0027 #include <linux/stackdepot.h>
0028
0029 #include "internal.h"
0030 #include "slab.h"
0031
0032 #define CREATE_TRACE_POINTS
0033 #include <trace/events/kmem.h>
0034
0035 enum slab_state slab_state;
0036 LIST_HEAD(slab_caches);
0037 DEFINE_MUTEX(slab_mutex);
0038 struct kmem_cache *kmem_cache;
0039
0040 static LIST_HEAD(slab_caches_to_rcu_destroy);
0041 static void slab_caches_to_rcu_destroy_workfn(struct work_struct *work);
0042 static DECLARE_WORK(slab_caches_to_rcu_destroy_work,
0043 slab_caches_to_rcu_destroy_workfn);
0044
0045
0046
0047
0048 #define SLAB_NEVER_MERGE (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | \
0049 SLAB_TRACE | SLAB_TYPESAFE_BY_RCU | SLAB_NOLEAKTRACE | \
0050 SLAB_FAILSLAB | kasan_never_merge())
0051
0052 #define SLAB_MERGE_SAME (SLAB_RECLAIM_ACCOUNT | SLAB_CACHE_DMA | \
0053 SLAB_CACHE_DMA32 | SLAB_ACCOUNT)
0054
0055
0056
0057
0058 static bool slab_nomerge = !IS_ENABLED(CONFIG_SLAB_MERGE_DEFAULT);
0059
0060 static int __init setup_slab_nomerge(char *str)
0061 {
0062 slab_nomerge = true;
0063 return 1;
0064 }
0065
0066 static int __init setup_slab_merge(char *str)
0067 {
0068 slab_nomerge = false;
0069 return 1;
0070 }
0071
0072 #ifdef CONFIG_SLUB
0073 __setup_param("slub_nomerge", slub_nomerge, setup_slab_nomerge, 0);
0074 __setup_param("slub_merge", slub_merge, setup_slab_merge, 0);
0075 #endif
0076
0077 __setup("slab_nomerge", setup_slab_nomerge);
0078 __setup("slab_merge", setup_slab_merge);
0079
0080
0081
0082
0083 unsigned int kmem_cache_size(struct kmem_cache *s)
0084 {
0085 return s->object_size;
0086 }
0087 EXPORT_SYMBOL(kmem_cache_size);
0088
0089 #ifdef CONFIG_DEBUG_VM
0090 static int kmem_cache_sanity_check(const char *name, unsigned int size)
0091 {
0092 if (!name || in_interrupt() || size > KMALLOC_MAX_SIZE) {
0093 pr_err("kmem_cache_create(%s) integrity check failed\n", name);
0094 return -EINVAL;
0095 }
0096
0097 WARN_ON(strchr(name, ' '));
0098 return 0;
0099 }
0100 #else
0101 static inline int kmem_cache_sanity_check(const char *name, unsigned int size)
0102 {
0103 return 0;
0104 }
0105 #endif
0106
0107
0108
0109
0110
0111 static unsigned int calculate_alignment(slab_flags_t flags,
0112 unsigned int align, unsigned int size)
0113 {
0114
0115
0116
0117
0118
0119
0120
0121 if (flags & SLAB_HWCACHE_ALIGN) {
0122 unsigned int ralign;
0123
0124 ralign = cache_line_size();
0125 while (size <= ralign / 2)
0126 ralign /= 2;
0127 align = max(align, ralign);
0128 }
0129
0130 align = max(align, arch_slab_minalign());
0131
0132 return ALIGN(align, sizeof(void *));
0133 }
0134
0135
0136
0137
0138 int slab_unmergeable(struct kmem_cache *s)
0139 {
0140 if (slab_nomerge || (s->flags & SLAB_NEVER_MERGE))
0141 return 1;
0142
0143 if (s->ctor)
0144 return 1;
0145
0146 if (s->usersize)
0147 return 1;
0148
0149
0150
0151
0152 if (s->refcount < 0)
0153 return 1;
0154
0155 return 0;
0156 }
0157
0158 struct kmem_cache *find_mergeable(unsigned int size, unsigned int align,
0159 slab_flags_t flags, const char *name, void (*ctor)(void *))
0160 {
0161 struct kmem_cache *s;
0162
0163 if (slab_nomerge)
0164 return NULL;
0165
0166 if (ctor)
0167 return NULL;
0168
0169 size = ALIGN(size, sizeof(void *));
0170 align = calculate_alignment(flags, align, size);
0171 size = ALIGN(size, align);
0172 flags = kmem_cache_flags(size, flags, name);
0173
0174 if (flags & SLAB_NEVER_MERGE)
0175 return NULL;
0176
0177 list_for_each_entry_reverse(s, &slab_caches, list) {
0178 if (slab_unmergeable(s))
0179 continue;
0180
0181 if (size > s->size)
0182 continue;
0183
0184 if ((flags & SLAB_MERGE_SAME) != (s->flags & SLAB_MERGE_SAME))
0185 continue;
0186
0187
0188
0189
0190 if ((s->size & ~(align - 1)) != s->size)
0191 continue;
0192
0193 if (s->size - size >= sizeof(void *))
0194 continue;
0195
0196 if (IS_ENABLED(CONFIG_SLAB) && align &&
0197 (align > s->align || s->align % align))
0198 continue;
0199
0200 return s;
0201 }
0202 return NULL;
0203 }
0204
0205 static struct kmem_cache *create_cache(const char *name,
0206 unsigned int object_size, unsigned int align,
0207 slab_flags_t flags, unsigned int useroffset,
0208 unsigned int usersize, void (*ctor)(void *),
0209 struct kmem_cache *root_cache)
0210 {
0211 struct kmem_cache *s;
0212 int err;
0213
0214 if (WARN_ON(useroffset + usersize > object_size))
0215 useroffset = usersize = 0;
0216
0217 err = -ENOMEM;
0218 s = kmem_cache_zalloc(kmem_cache, GFP_KERNEL);
0219 if (!s)
0220 goto out;
0221
0222 s->name = name;
0223 s->size = s->object_size = object_size;
0224 s->align = align;
0225 s->ctor = ctor;
0226 s->useroffset = useroffset;
0227 s->usersize = usersize;
0228
0229 err = __kmem_cache_create(s, flags);
0230 if (err)
0231 goto out_free_cache;
0232
0233 s->refcount = 1;
0234 list_add(&s->list, &slab_caches);
0235 out:
0236 if (err)
0237 return ERR_PTR(err);
0238 return s;
0239
0240 out_free_cache:
0241 kmem_cache_free(kmem_cache, s);
0242 goto out;
0243 }
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273 struct kmem_cache *
0274 kmem_cache_create_usercopy(const char *name,
0275 unsigned int size, unsigned int align,
0276 slab_flags_t flags,
0277 unsigned int useroffset, unsigned int usersize,
0278 void (*ctor)(void *))
0279 {
0280 struct kmem_cache *s = NULL;
0281 const char *cache_name;
0282 int err;
0283
0284 #ifdef CONFIG_SLUB_DEBUG
0285
0286
0287
0288
0289
0290
0291
0292 if (flags & SLAB_DEBUG_FLAGS)
0293 static_branch_enable(&slub_debug_enabled);
0294 if (flags & SLAB_STORE_USER)
0295 stack_depot_init();
0296 #endif
0297
0298 mutex_lock(&slab_mutex);
0299
0300 err = kmem_cache_sanity_check(name, size);
0301 if (err) {
0302 goto out_unlock;
0303 }
0304
0305
0306 if (flags & ~SLAB_FLAGS_PERMITTED) {
0307 err = -EINVAL;
0308 goto out_unlock;
0309 }
0310
0311
0312
0313
0314
0315
0316
0317 flags &= CACHE_CREATE_MASK;
0318
0319
0320 if (WARN_ON(!usersize && useroffset) ||
0321 WARN_ON(size < usersize || size - usersize < useroffset))
0322 usersize = useroffset = 0;
0323
0324 if (!usersize)
0325 s = __kmem_cache_alias(name, size, align, flags, ctor);
0326 if (s)
0327 goto out_unlock;
0328
0329 cache_name = kstrdup_const(name, GFP_KERNEL);
0330 if (!cache_name) {
0331 err = -ENOMEM;
0332 goto out_unlock;
0333 }
0334
0335 s = create_cache(cache_name, size,
0336 calculate_alignment(flags, align, size),
0337 flags, useroffset, usersize, ctor, NULL);
0338 if (IS_ERR(s)) {
0339 err = PTR_ERR(s);
0340 kfree_const(cache_name);
0341 }
0342
0343 out_unlock:
0344 mutex_unlock(&slab_mutex);
0345
0346 if (err) {
0347 if (flags & SLAB_PANIC)
0348 panic("%s: Failed to create slab '%s'. Error %d\n",
0349 __func__, name, err);
0350 else {
0351 pr_warn("%s(%s) failed with error %d\n",
0352 __func__, name, err);
0353 dump_stack();
0354 }
0355 return NULL;
0356 }
0357 return s;
0358 }
0359 EXPORT_SYMBOL(kmem_cache_create_usercopy);
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386 struct kmem_cache *
0387 kmem_cache_create(const char *name, unsigned int size, unsigned int align,
0388 slab_flags_t flags, void (*ctor)(void *))
0389 {
0390 return kmem_cache_create_usercopy(name, size, align, flags, 0, 0,
0391 ctor);
0392 }
0393 EXPORT_SYMBOL(kmem_cache_create);
0394
0395 #ifdef SLAB_SUPPORTS_SYSFS
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405 static void kmem_cache_release(struct kmem_cache *s)
0406 {
0407 sysfs_slab_unlink(s);
0408 sysfs_slab_release(s);
0409 }
0410 #else
0411 static void kmem_cache_release(struct kmem_cache *s)
0412 {
0413 slab_kmem_cache_release(s);
0414 }
0415 #endif
0416
0417 static void slab_caches_to_rcu_destroy_workfn(struct work_struct *work)
0418 {
0419 LIST_HEAD(to_destroy);
0420 struct kmem_cache *s, *s2;
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431 mutex_lock(&slab_mutex);
0432 list_splice_init(&slab_caches_to_rcu_destroy, &to_destroy);
0433 mutex_unlock(&slab_mutex);
0434
0435 if (list_empty(&to_destroy))
0436 return;
0437
0438 rcu_barrier();
0439
0440 list_for_each_entry_safe(s, s2, &to_destroy, list) {
0441 debugfs_slab_release(s);
0442 kfence_shutdown_cache(s);
0443 kmem_cache_release(s);
0444 }
0445 }
0446
0447 static int shutdown_cache(struct kmem_cache *s)
0448 {
0449
0450 kasan_cache_shutdown(s);
0451
0452 if (__kmem_cache_shutdown(s) != 0)
0453 return -EBUSY;
0454
0455 list_del(&s->list);
0456
0457 if (s->flags & SLAB_TYPESAFE_BY_RCU) {
0458 list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
0459 schedule_work(&slab_caches_to_rcu_destroy_work);
0460 } else {
0461 kfence_shutdown_cache(s);
0462 debugfs_slab_release(s);
0463 }
0464
0465 return 0;
0466 }
0467
0468 void slab_kmem_cache_release(struct kmem_cache *s)
0469 {
0470 __kmem_cache_release(s);
0471 kfree_const(s->name);
0472 kmem_cache_free(kmem_cache, s);
0473 }
0474
0475 void kmem_cache_destroy(struct kmem_cache *s)
0476 {
0477 int refcnt;
0478 bool rcu_set;
0479
0480 if (unlikely(!s) || !kasan_check_byte(s))
0481 return;
0482
0483 cpus_read_lock();
0484 mutex_lock(&slab_mutex);
0485
0486 rcu_set = s->flags & SLAB_TYPESAFE_BY_RCU;
0487
0488 refcnt = --s->refcount;
0489 if (refcnt)
0490 goto out_unlock;
0491
0492 WARN(shutdown_cache(s),
0493 "%s %s: Slab cache still has objects when called from %pS",
0494 __func__, s->name, (void *)_RET_IP_);
0495 out_unlock:
0496 mutex_unlock(&slab_mutex);
0497 cpus_read_unlock();
0498 if (!refcnt && !rcu_set)
0499 kmem_cache_release(s);
0500 }
0501 EXPORT_SYMBOL(kmem_cache_destroy);
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512 int kmem_cache_shrink(struct kmem_cache *cachep)
0513 {
0514 int ret;
0515
0516
0517 kasan_cache_shrink(cachep);
0518 ret = __kmem_cache_shrink(cachep);
0519
0520 return ret;
0521 }
0522 EXPORT_SYMBOL(kmem_cache_shrink);
0523
0524 bool slab_is_available(void)
0525 {
0526 return slab_state >= UP;
0527 }
0528
0529 #ifdef CONFIG_PRINTK
0530
0531
0532
0533
0534
0535
0536
0537
0538 bool kmem_valid_obj(void *object)
0539 {
0540 struct folio *folio;
0541
0542
0543 if (object < (void *)PAGE_SIZE || !virt_addr_valid(object))
0544 return false;
0545 folio = virt_to_folio(object);
0546 return folio_test_slab(folio);
0547 }
0548 EXPORT_SYMBOL_GPL(kmem_valid_obj);
0549
0550 static void kmem_obj_info(struct kmem_obj_info *kpp, void *object, struct slab *slab)
0551 {
0552 if (__kfence_obj_info(kpp, object, slab))
0553 return;
0554 __kmem_obj_info(kpp, object, slab);
0555 }
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569
0570
0571
0572 void kmem_dump_obj(void *object)
0573 {
0574 char *cp = IS_ENABLED(CONFIG_MMU) ? "" : "/vmalloc";
0575 int i;
0576 struct slab *slab;
0577 unsigned long ptroffset;
0578 struct kmem_obj_info kp = { };
0579
0580 if (WARN_ON_ONCE(!virt_addr_valid(object)))
0581 return;
0582 slab = virt_to_slab(object);
0583 if (WARN_ON_ONCE(!slab)) {
0584 pr_cont(" non-slab memory.\n");
0585 return;
0586 }
0587 kmem_obj_info(&kp, object, slab);
0588 if (kp.kp_slab_cache)
0589 pr_cont(" slab%s %s", cp, kp.kp_slab_cache->name);
0590 else
0591 pr_cont(" slab%s", cp);
0592 if (is_kfence_address(object))
0593 pr_cont(" (kfence)");
0594 if (kp.kp_objp)
0595 pr_cont(" start %px", kp.kp_objp);
0596 if (kp.kp_data_offset)
0597 pr_cont(" data offset %lu", kp.kp_data_offset);
0598 if (kp.kp_objp) {
0599 ptroffset = ((char *)object - (char *)kp.kp_objp) - kp.kp_data_offset;
0600 pr_cont(" pointer offset %lu", ptroffset);
0601 }
0602 if (kp.kp_slab_cache && kp.kp_slab_cache->usersize)
0603 pr_cont(" size %u", kp.kp_slab_cache->usersize);
0604 if (kp.kp_ret)
0605 pr_cont(" allocated at %pS\n", kp.kp_ret);
0606 else
0607 pr_cont("\n");
0608 for (i = 0; i < ARRAY_SIZE(kp.kp_stack); i++) {
0609 if (!kp.kp_stack[i])
0610 break;
0611 pr_info(" %pS\n", kp.kp_stack[i]);
0612 }
0613
0614 if (kp.kp_free_stack[0])
0615 pr_cont(" Free path:\n");
0616
0617 for (i = 0; i < ARRAY_SIZE(kp.kp_free_stack); i++) {
0618 if (!kp.kp_free_stack[i])
0619 break;
0620 pr_info(" %pS\n", kp.kp_free_stack[i]);
0621 }
0622
0623 }
0624 EXPORT_SYMBOL_GPL(kmem_dump_obj);
0625 #endif
0626
0627 #ifndef CONFIG_SLOB
0628
0629 void __init create_boot_cache(struct kmem_cache *s, const char *name,
0630 unsigned int size, slab_flags_t flags,
0631 unsigned int useroffset, unsigned int usersize)
0632 {
0633 int err;
0634 unsigned int align = ARCH_KMALLOC_MINALIGN;
0635
0636 s->name = name;
0637 s->size = s->object_size = size;
0638
0639
0640
0641
0642
0643 if (is_power_of_2(size))
0644 align = max(align, size);
0645 s->align = calculate_alignment(flags, align, size);
0646
0647 s->useroffset = useroffset;
0648 s->usersize = usersize;
0649
0650 err = __kmem_cache_create(s, flags);
0651
0652 if (err)
0653 panic("Creation of kmalloc slab %s size=%u failed. Reason %d\n",
0654 name, size, err);
0655
0656 s->refcount = -1;
0657 }
0658
0659 struct kmem_cache *__init create_kmalloc_cache(const char *name,
0660 unsigned int size, slab_flags_t flags,
0661 unsigned int useroffset, unsigned int usersize)
0662 {
0663 struct kmem_cache *s = kmem_cache_zalloc(kmem_cache, GFP_NOWAIT);
0664
0665 if (!s)
0666 panic("Out of memory when creating slab %s\n", name);
0667
0668 create_boot_cache(s, name, size, flags, useroffset, usersize);
0669 kasan_cache_create_kmalloc(s);
0670 list_add(&s->list, &slab_caches);
0671 s->refcount = 1;
0672 return s;
0673 }
0674
0675 struct kmem_cache *
0676 kmalloc_caches[NR_KMALLOC_TYPES][KMALLOC_SHIFT_HIGH + 1] __ro_after_init =
0677 { };
0678 EXPORT_SYMBOL(kmalloc_caches);
0679
0680
0681
0682
0683
0684
0685
0686 static u8 size_index[24] __ro_after_init = {
0687 3,
0688 4,
0689 5,
0690 5,
0691 6,
0692 6,
0693 6,
0694 6,
0695 1,
0696 1,
0697 1,
0698 1,
0699 7,
0700 7,
0701 7,
0702 7,
0703 2,
0704 2,
0705 2,
0706 2,
0707 2,
0708 2,
0709 2,
0710 2
0711 };
0712
0713 static inline unsigned int size_index_elem(unsigned int bytes)
0714 {
0715 return (bytes - 1) / 8;
0716 }
0717
0718
0719
0720
0721
0722 struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
0723 {
0724 unsigned int index;
0725
0726 if (size <= 192) {
0727 if (!size)
0728 return ZERO_SIZE_PTR;
0729
0730 index = size_index[size_index_elem(size)];
0731 } else {
0732 if (WARN_ON_ONCE(size > KMALLOC_MAX_CACHE_SIZE))
0733 return NULL;
0734 index = fls(size - 1);
0735 }
0736
0737 return kmalloc_caches[kmalloc_type(flags)][index];
0738 }
0739
0740 #ifdef CONFIG_ZONE_DMA
0741 #define KMALLOC_DMA_NAME(sz) .name[KMALLOC_DMA] = "dma-kmalloc-" #sz,
0742 #else
0743 #define KMALLOC_DMA_NAME(sz)
0744 #endif
0745
0746 #ifdef CONFIG_MEMCG_KMEM
0747 #define KMALLOC_CGROUP_NAME(sz) .name[KMALLOC_CGROUP] = "kmalloc-cg-" #sz,
0748 #else
0749 #define KMALLOC_CGROUP_NAME(sz)
0750 #endif
0751
0752 #define INIT_KMALLOC_INFO(__size, __short_size) \
0753 { \
0754 .name[KMALLOC_NORMAL] = "kmalloc-" #__short_size, \
0755 .name[KMALLOC_RECLAIM] = "kmalloc-rcl-" #__short_size, \
0756 KMALLOC_CGROUP_NAME(__short_size) \
0757 KMALLOC_DMA_NAME(__short_size) \
0758 .size = __size, \
0759 }
0760
0761
0762
0763
0764
0765
0766 const struct kmalloc_info_struct kmalloc_info[] __initconst = {
0767 INIT_KMALLOC_INFO(0, 0),
0768 INIT_KMALLOC_INFO(96, 96),
0769 INIT_KMALLOC_INFO(192, 192),
0770 INIT_KMALLOC_INFO(8, 8),
0771 INIT_KMALLOC_INFO(16, 16),
0772 INIT_KMALLOC_INFO(32, 32),
0773 INIT_KMALLOC_INFO(64, 64),
0774 INIT_KMALLOC_INFO(128, 128),
0775 INIT_KMALLOC_INFO(256, 256),
0776 INIT_KMALLOC_INFO(512, 512),
0777 INIT_KMALLOC_INFO(1024, 1k),
0778 INIT_KMALLOC_INFO(2048, 2k),
0779 INIT_KMALLOC_INFO(4096, 4k),
0780 INIT_KMALLOC_INFO(8192, 8k),
0781 INIT_KMALLOC_INFO(16384, 16k),
0782 INIT_KMALLOC_INFO(32768, 32k),
0783 INIT_KMALLOC_INFO(65536, 64k),
0784 INIT_KMALLOC_INFO(131072, 128k),
0785 INIT_KMALLOC_INFO(262144, 256k),
0786 INIT_KMALLOC_INFO(524288, 512k),
0787 INIT_KMALLOC_INFO(1048576, 1M),
0788 INIT_KMALLOC_INFO(2097152, 2M),
0789 INIT_KMALLOC_INFO(4194304, 4M),
0790 INIT_KMALLOC_INFO(8388608, 8M),
0791 INIT_KMALLOC_INFO(16777216, 16M),
0792 INIT_KMALLOC_INFO(33554432, 32M)
0793 };
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803
0804
0805
0806 void __init setup_kmalloc_cache_index_table(void)
0807 {
0808 unsigned int i;
0809
0810 BUILD_BUG_ON(KMALLOC_MIN_SIZE > 256 ||
0811 !is_power_of_2(KMALLOC_MIN_SIZE));
0812
0813 for (i = 8; i < KMALLOC_MIN_SIZE; i += 8) {
0814 unsigned int elem = size_index_elem(i);
0815
0816 if (elem >= ARRAY_SIZE(size_index))
0817 break;
0818 size_index[elem] = KMALLOC_SHIFT_LOW;
0819 }
0820
0821 if (KMALLOC_MIN_SIZE >= 64) {
0822
0823
0824
0825
0826 for (i = 64 + 8; i <= 96; i += 8)
0827 size_index[size_index_elem(i)] = 7;
0828
0829 }
0830
0831 if (KMALLOC_MIN_SIZE >= 128) {
0832
0833
0834
0835
0836
0837 for (i = 128 + 8; i <= 192; i += 8)
0838 size_index[size_index_elem(i)] = 8;
0839 }
0840 }
0841
0842 static void __init
0843 new_kmalloc_cache(int idx, enum kmalloc_cache_type type, slab_flags_t flags)
0844 {
0845 if (type == KMALLOC_RECLAIM) {
0846 flags |= SLAB_RECLAIM_ACCOUNT;
0847 } else if (IS_ENABLED(CONFIG_MEMCG_KMEM) && (type == KMALLOC_CGROUP)) {
0848 if (mem_cgroup_kmem_disabled()) {
0849 kmalloc_caches[type][idx] = kmalloc_caches[KMALLOC_NORMAL][idx];
0850 return;
0851 }
0852 flags |= SLAB_ACCOUNT;
0853 } else if (IS_ENABLED(CONFIG_ZONE_DMA) && (type == KMALLOC_DMA)) {
0854 flags |= SLAB_CACHE_DMA;
0855 }
0856
0857 kmalloc_caches[type][idx] = create_kmalloc_cache(
0858 kmalloc_info[idx].name[type],
0859 kmalloc_info[idx].size, flags, 0,
0860 kmalloc_info[idx].size);
0861
0862
0863
0864
0865
0866 if (IS_ENABLED(CONFIG_MEMCG_KMEM) && (type == KMALLOC_NORMAL))
0867 kmalloc_caches[type][idx]->refcount = -1;
0868 }
0869
0870
0871
0872
0873
0874
0875 void __init create_kmalloc_caches(slab_flags_t flags)
0876 {
0877 int i;
0878 enum kmalloc_cache_type type;
0879
0880
0881
0882
0883 for (type = KMALLOC_NORMAL; type < NR_KMALLOC_TYPES; type++) {
0884 for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
0885 if (!kmalloc_caches[type][i])
0886 new_kmalloc_cache(i, type, flags);
0887
0888
0889
0890
0891
0892
0893 if (KMALLOC_MIN_SIZE <= 32 && i == 6 &&
0894 !kmalloc_caches[type][1])
0895 new_kmalloc_cache(1, type, flags);
0896 if (KMALLOC_MIN_SIZE <= 64 && i == 7 &&
0897 !kmalloc_caches[type][2])
0898 new_kmalloc_cache(2, type, flags);
0899 }
0900 }
0901
0902
0903 slab_state = UP;
0904 }
0905 #endif
0906
0907 gfp_t kmalloc_fix_flags(gfp_t flags)
0908 {
0909 gfp_t invalid_mask = flags & GFP_SLAB_BUG_MASK;
0910
0911 flags &= ~GFP_SLAB_BUG_MASK;
0912 pr_warn("Unexpected gfp: %#x (%pGg). Fixing up to gfp: %#x (%pGg). Fix your code!\n",
0913 invalid_mask, &invalid_mask, flags, &flags);
0914 dump_stack();
0915
0916 return flags;
0917 }
0918
0919
0920
0921
0922
0923
0924 void *kmalloc_order(size_t size, gfp_t flags, unsigned int order)
0925 {
0926 void *ret = NULL;
0927 struct page *page;
0928
0929 if (unlikely(flags & GFP_SLAB_BUG_MASK))
0930 flags = kmalloc_fix_flags(flags);
0931
0932 flags |= __GFP_COMP;
0933 page = alloc_pages(flags, order);
0934 if (likely(page)) {
0935 ret = page_address(page);
0936 mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE_B,
0937 PAGE_SIZE << order);
0938 }
0939 ret = kasan_kmalloc_large(ret, size, flags);
0940
0941 kmemleak_alloc(ret, size, 1, flags);
0942 return ret;
0943 }
0944 EXPORT_SYMBOL(kmalloc_order);
0945
0946 #ifdef CONFIG_TRACING
0947 void *kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order)
0948 {
0949 void *ret = kmalloc_order(size, flags, order);
0950 trace_kmalloc(_RET_IP_, ret, NULL, size, PAGE_SIZE << order, flags);
0951 return ret;
0952 }
0953 EXPORT_SYMBOL(kmalloc_order_trace);
0954 #endif
0955
0956 #ifdef CONFIG_SLAB_FREELIST_RANDOM
0957
0958 static void freelist_randomize(struct rnd_state *state, unsigned int *list,
0959 unsigned int count)
0960 {
0961 unsigned int rand;
0962 unsigned int i;
0963
0964 for (i = 0; i < count; i++)
0965 list[i] = i;
0966
0967
0968 for (i = count - 1; i > 0; i--) {
0969 rand = prandom_u32_state(state);
0970 rand %= (i + 1);
0971 swap(list[i], list[rand]);
0972 }
0973 }
0974
0975
0976 int cache_random_seq_create(struct kmem_cache *cachep, unsigned int count,
0977 gfp_t gfp)
0978 {
0979 struct rnd_state state;
0980
0981 if (count < 2 || cachep->random_seq)
0982 return 0;
0983
0984 cachep->random_seq = kcalloc(count, sizeof(unsigned int), gfp);
0985 if (!cachep->random_seq)
0986 return -ENOMEM;
0987
0988
0989 prandom_seed_state(&state, get_random_long());
0990
0991 freelist_randomize(&state, cachep->random_seq, count);
0992 return 0;
0993 }
0994
0995
0996 void cache_random_seq_destroy(struct kmem_cache *cachep)
0997 {
0998 kfree(cachep->random_seq);
0999 cachep->random_seq = NULL;
1000 }
1001 #endif
1002
1003 #if defined(CONFIG_SLAB) || defined(CONFIG_SLUB_DEBUG)
1004 #ifdef CONFIG_SLAB
1005 #define SLABINFO_RIGHTS (0600)
1006 #else
1007 #define SLABINFO_RIGHTS (0400)
1008 #endif
1009
1010 static void print_slabinfo_header(struct seq_file *m)
1011 {
1012
1013
1014
1015
1016 #ifdef CONFIG_DEBUG_SLAB
1017 seq_puts(m, "slabinfo - version: 2.1 (statistics)\n");
1018 #else
1019 seq_puts(m, "slabinfo - version: 2.1\n");
1020 #endif
1021 seq_puts(m, "# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
1022 seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
1023 seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
1024 #ifdef CONFIG_DEBUG_SLAB
1025 seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> <error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
1026 seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
1027 #endif
1028 seq_putc(m, '\n');
1029 }
1030
1031 static void *slab_start(struct seq_file *m, loff_t *pos)
1032 {
1033 mutex_lock(&slab_mutex);
1034 return seq_list_start(&slab_caches, *pos);
1035 }
1036
1037 static void *slab_next(struct seq_file *m, void *p, loff_t *pos)
1038 {
1039 return seq_list_next(p, &slab_caches, pos);
1040 }
1041
1042 static void slab_stop(struct seq_file *m, void *p)
1043 {
1044 mutex_unlock(&slab_mutex);
1045 }
1046
1047 static void cache_show(struct kmem_cache *s, struct seq_file *m)
1048 {
1049 struct slabinfo sinfo;
1050
1051 memset(&sinfo, 0, sizeof(sinfo));
1052 get_slabinfo(s, &sinfo);
1053
1054 seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
1055 s->name, sinfo.active_objs, sinfo.num_objs, s->size,
1056 sinfo.objects_per_slab, (1 << sinfo.cache_order));
1057
1058 seq_printf(m, " : tunables %4u %4u %4u",
1059 sinfo.limit, sinfo.batchcount, sinfo.shared);
1060 seq_printf(m, " : slabdata %6lu %6lu %6lu",
1061 sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail);
1062 slabinfo_show_stats(m, s);
1063 seq_putc(m, '\n');
1064 }
1065
1066 static int slab_show(struct seq_file *m, void *p)
1067 {
1068 struct kmem_cache *s = list_entry(p, struct kmem_cache, list);
1069
1070 if (p == slab_caches.next)
1071 print_slabinfo_header(m);
1072 cache_show(s, m);
1073 return 0;
1074 }
1075
1076 void dump_unreclaimable_slab(void)
1077 {
1078 struct kmem_cache *s;
1079 struct slabinfo sinfo;
1080
1081
1082
1083
1084
1085
1086
1087
1088 if (!mutex_trylock(&slab_mutex)) {
1089 pr_warn("excessive unreclaimable slab but cannot dump stats\n");
1090 return;
1091 }
1092
1093 pr_info("Unreclaimable slab info:\n");
1094 pr_info("Name Used Total\n");
1095
1096 list_for_each_entry(s, &slab_caches, list) {
1097 if (s->flags & SLAB_RECLAIM_ACCOUNT)
1098 continue;
1099
1100 get_slabinfo(s, &sinfo);
1101
1102 if (sinfo.num_objs > 0)
1103 pr_info("%-17s %10luKB %10luKB\n", s->name,
1104 (sinfo.active_objs * s->size) / 1024,
1105 (sinfo.num_objs * s->size) / 1024);
1106 }
1107 mutex_unlock(&slab_mutex);
1108 }
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123 static const struct seq_operations slabinfo_op = {
1124 .start = slab_start,
1125 .next = slab_next,
1126 .stop = slab_stop,
1127 .show = slab_show,
1128 };
1129
1130 static int slabinfo_open(struct inode *inode, struct file *file)
1131 {
1132 return seq_open(file, &slabinfo_op);
1133 }
1134
1135 static const struct proc_ops slabinfo_proc_ops = {
1136 .proc_flags = PROC_ENTRY_PERMANENT,
1137 .proc_open = slabinfo_open,
1138 .proc_read = seq_read,
1139 .proc_write = slabinfo_write,
1140 .proc_lseek = seq_lseek,
1141 .proc_release = seq_release,
1142 };
1143
1144 static int __init slab_proc_init(void)
1145 {
1146 proc_create("slabinfo", SLABINFO_RIGHTS, NULL, &slabinfo_proc_ops);
1147 return 0;
1148 }
1149 module_init(slab_proc_init);
1150
1151 #endif
1152
1153 static __always_inline void *__do_krealloc(const void *p, size_t new_size,
1154 gfp_t flags)
1155 {
1156 void *ret;
1157 size_t ks;
1158
1159
1160 if (likely(!ZERO_OR_NULL_PTR(p))) {
1161 if (!kasan_check_byte(p))
1162 return NULL;
1163 ks = kfence_ksize(p) ?: __ksize(p);
1164 } else
1165 ks = 0;
1166
1167
1168 if (ks >= new_size) {
1169 p = kasan_krealloc((void *)p, new_size, flags);
1170 return (void *)p;
1171 }
1172
1173 ret = kmalloc_track_caller(new_size, flags);
1174 if (ret && p) {
1175
1176 kasan_disable_current();
1177 memcpy(ret, kasan_reset_tag(p), ks);
1178 kasan_enable_current();
1179 }
1180
1181 return ret;
1182 }
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197 void *krealloc(const void *p, size_t new_size, gfp_t flags)
1198 {
1199 void *ret;
1200
1201 if (unlikely(!new_size)) {
1202 kfree(p);
1203 return ZERO_SIZE_PTR;
1204 }
1205
1206 ret = __do_krealloc(p, new_size, flags);
1207 if (ret && kasan_reset_tag(p) != kasan_reset_tag(ret))
1208 kfree(p);
1209
1210 return ret;
1211 }
1212 EXPORT_SYMBOL(krealloc);
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225 void kfree_sensitive(const void *p)
1226 {
1227 size_t ks;
1228 void *mem = (void *)p;
1229
1230 ks = ksize(mem);
1231 if (ks)
1232 memzero_explicit(mem, ks);
1233 kfree(mem);
1234 }
1235 EXPORT_SYMBOL(kfree_sensitive);
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251 size_t ksize(const void *objp)
1252 {
1253 size_t size;
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270 if (unlikely(ZERO_OR_NULL_PTR(objp)) || !kasan_check_byte(objp))
1271 return 0;
1272
1273 size = kfence_ksize(objp) ?: __ksize(objp);
1274
1275
1276
1277
1278 kasan_unpoison_range(objp, size);
1279 return size;
1280 }
1281 EXPORT_SYMBOL(ksize);
1282
1283
1284 EXPORT_TRACEPOINT_SYMBOL(kmalloc);
1285 EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc);
1286 EXPORT_TRACEPOINT_SYMBOL(kmalloc_node);
1287 EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc_node);
1288 EXPORT_TRACEPOINT_SYMBOL(kfree);
1289 EXPORT_TRACEPOINT_SYMBOL(kmem_cache_free);
1290
1291 int should_failslab(struct kmem_cache *s, gfp_t gfpflags)
1292 {
1293 if (__should_failslab(s, gfpflags))
1294 return -ENOMEM;
1295 return 0;
1296 }
1297 ALLOW_ERROR_INJECTION(should_failslab, ERRNO);