diff options
| author | Kees Cook <kees@kernel.org> | 2026-10-13 22:23:43 -0700 |
|---|---|---|
| committer | Harry Yoo (Meta) <harry@kernel.org> | 2026-10-16 15:52:26 +0100 |
| commit | c57fbbe42e907fa26c5ffada52d913d4ca5fa66e (patch) | |
| tree | 3bf7a608b8e257b37449c42ee4ee5965664cc329 | |
| parent | 655668f0caf32a42fef10aaf31137e52f46a0260 (diff) | |
| download | linux-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.c | 3 |
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; |
