summaryrefslogtreecommitdiffstats
path: root/mm/slob.c
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2022-09-29 11:30:55 +0200
committerVlastimil Babka <vbabka@suse.cz>2022-09-29 11:30:55 +0200
commit445d41d7a7c15793933f47c0c23fae3a1d09a8c1 (patch)
tree2621791892a2cc5b2df5e762af3843ae47453254 /mm/slob.c
parentMerge branch 'slab/for-6.1/slub_debug_waste' into slab/for-next (diff)
parentslab: Introduce kmalloc_size_roundup() (diff)
downloadlinux-445d41d7a7c15793933f47c0c23fae3a1d09a8c1.tar.xz
linux-445d41d7a7c15793933f47c0c23fae3a1d09a8c1.zip
Merge branch 'slab/for-6.1/kmalloc_size_roundup' into slab/for-next
The first two patches from a series by Kees Cook [1] that introduce kmalloc_size_roundup(). This will allow merging of per-subsystem patches using the new function and ultimately stop (ab)using ksize() in a way that causes ongoing trouble for debugging functionality and static checkers. [1] https://lore.kernel.org/all/20220923202822.2667581-1-keescook@chromium.org/ -- Resolved a conflict of modifying mm/slab.c __ksize() comment with a commit that unifies __ksize() implementation into mm/slab_common.c
Diffstat (limited to 'mm/slob.c')
-rw-r--r--mm/slob.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/mm/slob.c b/mm/slob.c
index 45a061b8ba38..fe567fcfa3a3 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -564,6 +564,20 @@ void kfree(const void *block)
}
EXPORT_SYMBOL(kfree);
+size_t kmalloc_size_roundup(size_t size)
+{
+ /* Short-circuit the 0 size case. */
+ if (unlikely(size == 0))
+ return 0;
+ /* Short-circuit saturated "too-large" case. */
+ if (unlikely(size == SIZE_MAX))
+ return SIZE_MAX;
+
+ return ALIGN(size, ARCH_KMALLOC_MINALIGN);
+}
+
+EXPORT_SYMBOL(kmalloc_size_roundup);
+
/* can't use ksize for kmem_cache_alloc memory, only kmalloc */
size_t __ksize(const void *block)
{