summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKees Cook <kees@kernel.org>2026-10-13 22:23:43 -0700
committerHarry Yoo (Meta) <harry@kernel.org>2026-10-16 15:52:26 +0100
commitc57fbbe42e907fa26c5ffada52d913d4ca5fa66e (patch)
tree3bf7a608b8e257b37449c42ee4ee5965664cc329
parent655668f0caf32a42fef10aaf31137e52f46a0260 (diff)
downloadlinux-next-c57fbbe42e907fa26c5ffada52d913d4ca5fa66e.tar.gz
linux-next-c57fbbe42e907fa26c5ffada52d913d4ca5fa66e.zip
ipc, msg: Account msg_msg allocations with GFP_KERNEL_ACCOUNT again
Since commit 734bbc1c97ea7 ("ipc, msg: Use dedicated slab buckets for alloc_msg()"), alloc_msg() allocates with GFP_KERNEL, and a msg_msg is accounted only through SLAB_ACCOUNT on its bucket caches. With CONFIG_SLAB_BUCKETS=n, kmem_buckets_create() creates no caches and kmem_buckets_alloc() is a GFP_KERNEL kmalloc() from the general caches, which do not account it; the same happens when kmem_buckets_create() fails. Either way, the allocation is not charged to the sender's memory cgroup. Allocate with GFP_KERNEL_ACCOUNT again, as before that commit, so the allocation is charged whichever cache serves it. Build tested ARCH=x86_64 defconfig with GCC 16.2.0, with CONFIG_SLAB_BUCKETS as y and n. Fixes: 734bbc1c97ea7 ("ipc, msg: Use dedicated slab buckets for alloc_msg()") Cc: stable@vger.kernel.org Signed-off-by: Kees Cook <kees@kernel.org> Link: https://patch.msgid.link/20261014052344.384723-2-kees@kernel.org Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org> Reviewed-by: Harry Yoo (Meta) <harry@kernel.org> Reviewed-by: Pedro Falcato <pfalcato@suse.de> Signed-off-by: Harry Yoo (Meta) <harry@kernel.org>
-rw-r--r--ipc/msgutil.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/ipc/msgutil.c b/ipc/msgutil.c
index e28f0cecb2ec..12663a40e9ae 100644
--- a/ipc/msgutil.c
+++ b/ipc/msgutil.c
@@ -58,7 +58,8 @@ static struct msg_msg *alloc_msg(size_t len)
size_t alen;
alen = min(len, DATALEN_MSG);
- msg = kmem_buckets_alloc(msg_buckets, sizeof(*msg) + alen, GFP_KERNEL);
+ msg = kmem_buckets_alloc(msg_buckets, sizeof(*msg) + alen,
+ GFP_KERNEL_ACCOUNT);
if (msg == NULL)
return NULL;