From 546ff428c69cef0976bcd6458db73c1cb09a2ea1 Mon Sep 17 00:00:00 2001 From: Yuanzheng Song Date: Thu, 30 Jun 2022 19:02:31 +0800 Subject: [PATCH] mm: replace module_param_named with module_param_cb in reclaim_acct ohos inclusion category: bugfix issue: #I5EYCF CVE: NA -------------------------------- The `echo 0/1 > /sys/module/reclaim_acct/parameters/disable` is used to enable/disable the reclaim memory accounting. The accounting info should be cleared before you enable it on again. So let's replace module_param_named with module_param_cb in reclaim_acct and clear the accounting info in reclaimacct_disable_set() before you enable it. Signed-off-by: Yuanzheng Song --- mm/internal.h | 1 + mm/reclaim_acct.c | 20 +++++++++++++++++++- mm/reclaimacct_show.c | 9 +++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/mm/internal.h b/mm/internal.h index 5b02066f7186..58d60d5472d0 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -791,6 +791,7 @@ struct reclaim_acct { }; bool reclaimacct_initialize_show_data(void); +void reclaimacct_reinitialize_show_data(void); void reclaimacct_destroy_show_data(void); void reclaimacct_collect_data(void); diff --git a/mm/reclaim_acct.c b/mm/reclaim_acct.c index 18ac0e096c41..2fbbbaee6f97 100644 --- a/mm/reclaim_acct.c +++ b/mm/reclaim_acct.c @@ -161,4 +161,22 @@ static int __init reclaimacct_module_init(void) late_initcall(reclaimacct_module_init); -module_param_named(disable, reclaimacct_disable, int, 0644); +static int reclaimacct_disable_set(const char *val, const struct kernel_param *kp) +{ + int ret; + + ret = param_set_int(val, kp); + if (ret) + return ret; + + if (!reclaimacct_disable) + reclaimacct_reinitialize_show_data(); + return 0; +} + +static const struct kernel_param_ops reclaimacct_disable_ops = { + .set = reclaimacct_disable_set, + .get = param_get_int, +}; + +module_param_cb(disable, &reclaimacct_disable_ops, &reclaimacct_disable, 0644); diff --git a/mm/reclaimacct_show.c b/mm/reclaimacct_show.c index 18b073db48ba..2ccf71875bfe 100644 --- a/mm/reclaimacct_show.c +++ b/mm/reclaimacct_show.c @@ -47,6 +47,15 @@ bool reclaimacct_initialize_show_data(void) return false; } +void reclaimacct_reinitialize_show_data(void) +{ + if (ra_show) + memset(ra_show, 0, sizeof(struct reclaimacct_show)); + + if (ra_eff) + memset(ra_eff, 0, sizeof(struct reclaim_efficiency) * RECLAIM_TYPES); +} + void reclaimacct_destroy_show_data(void) { kfree(ra_show); -- Gitee