[PATCH -next v2 4/4] cgroup/dmem: add argument checks in helpers

From: Chen Ridong

Date: Mon Feb 02 2026 - 07:43:10 EST


From: Chen Ridong <chenridong@xxxxxxxxxx>

Add WARN_ON_ONCE guards for NULL-sensitive arguments in dmem helpers to
avoid NULL dereferences on misused APIs. Valid callers are unaffected.

Signed-off-by: Chen Ridong <chenridong@xxxxxxxxxx>
---
kernel/cgroup/dmem.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/kernel/cgroup/dmem.c b/kernel/cgroup/dmem.c
index 1ea6afffa985..aa5bacf5fe45 100644
--- a/kernel/cgroup/dmem.c
+++ b/kernel/cgroup/dmem.c
@@ -307,6 +307,9 @@ bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool,
struct page_counter *ctest;
u64 used, min, low;

+ if (WARN_ON_ONCE(!test_pool))
+ return false;
+
/* Can always evict from current pool, despite limits */
if (limit_pool == test_pool)
return true;
@@ -343,7 +346,8 @@ bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool,
low = READ_ONCE(ctest->elow);
if (used > low)
return true;
-
+ if (WARN_ON_ONCE(!ret_hit_low))
+ return false;
*ret_hit_low = true;
return false;
}
@@ -512,7 +516,7 @@ struct dmem_cgroup_region *dmem_cgroup_register_region(u64 size, const char *fmt
char *region_name;
va_list ap;

- if (!size)
+ if (WARN_ON_ONCE(!size || !fmt))
return NULL;

va_start(ap, fmt);
@@ -520,6 +524,10 @@ struct dmem_cgroup_region *dmem_cgroup_register_region(u64 size, const char *fmt
va_end(ap);
if (!region_name)
return ERR_PTR(-ENOMEM);
+ if (WARN_ON_ONCE(!region_name[0])) {
+ kfree(region_name);
+ return ERR_PTR(-EINVAL);
+ }

ret = kzalloc(sizeof(*ret), GFP_KERNEL);
if (!ret) {
@@ -657,6 +665,9 @@ int dmem_cgroup_try_charge(struct dmem_cgroup_region *region, u64 size,
struct page_counter *fail;
int ret;

+ if (WARN_ON_ONCE(!region || !ret_pool))
+ return -EINVAL;
+
*ret_pool = NULL;
if (ret_limit_pool)
*ret_limit_pool = NULL;
--
2.34.1