* [PATCH] mm/damon/sysfs-schemes: Validate nid usage in nid_show()
@ 2025-10-20 11:28 Swaraj Gaikwad
2025-10-20 15:13 ` SeongJae Park
0 siblings, 1 reply; 2+ messages in thread
From: Swaraj Gaikwad @ 2025-10-20 11:28 UTC (permalink / raw)
To: SeongJae Park, Andrew Morton, open list:DAMON, open list:DAMON,
open list
Cc: skhan, david.hunter.linux, Swaraj Gaikwad
The nid_show() function previously returned the node ID (nid) without
verifying if the goal object of damos_sysfs_quota_goal was using a
node-based metric. This could lead to incorrect reporting when the
goal metric was unrelated to node memory.
This patch introduces a validation step to ensure that nid_show() only
returns the node ID for valid node-based metrics:
- DAMOS_QUOTA_NODE_MEM_USED_BP
- DAMOS_QUOTA_NODE_MEM_FREE_BP
For other metrics, it returns -EINVAL to prevent misleading information.
Tested with KUnit:
- Built kernel with KUnit and DAMON sysfs tests enabled.
- Executed KUnit tests:
./kunit.py run --kunitconfig ./mm/mm/damon/tests/.kunitconfig
- All 25 tests passed, including damon_sysfs_test_add_targets.
Based on commit 3a8660878839 ("Linux 6.18-rc1").
Signed-off-by: Swaraj Gaikwad <swarajgaikwad1925@gmail.com>
---
mm/damon/sysfs-schemes.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c
index 6536f16006c9..23a73b94fe53 100644
--- a/mm/damon/sysfs-schemes.c
+++ b/mm/damon/sysfs-schemes.c
@@ -1112,7 +1112,16 @@ static ssize_t nid_show(struct kobject *kobj,
struct damos_sysfs_quota_goal *goal = container_of(kobj, struct
damos_sysfs_quota_goal, kobj);
- /* todo: return error if the goal is not using nid */
+ switch (goal->metric) {
+ case DAMOS_QUOTA_USER_INPUT:
+ case DAMOS_QUOTA_SOME_MEM_PSI_US:
+ return -EINVAL;
+ case DAMOS_QUOTA_NODE_MEM_USED_BP:
+ case DAMOS_QUOTA_NODE_MEM_FREE_BP:
+ break;
+ default:
+ return -EINVAL;
+ }
return sysfs_emit(buf, "%d\n", goal->nid);
}
--
2.51.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] mm/damon/sysfs-schemes: Validate nid usage in nid_show()
2025-10-20 11:28 [PATCH] mm/damon/sysfs-schemes: Validate nid usage in nid_show() Swaraj Gaikwad
@ 2025-10-20 15:13 ` SeongJae Park
0 siblings, 0 replies; 2+ messages in thread
From: SeongJae Park @ 2025-10-20 15:13 UTC (permalink / raw)
To: Swaraj Gaikwad
Cc: SeongJae Park, Andrew Morton, open list:DAMON, open list:DAMON,
open list, skhan, david.hunter.linux
Hello Swaraj,
On Mon, 20 Oct 2025 11:28:24 +0000 Swaraj Gaikwad <swarajgaikwad1925@gmail.com> wrote:
> The nid_show() function previously returned the node ID (nid) without
> verifying if the goal object of damos_sysfs_quota_goal was using a
> node-based metric. This could lead to incorrect reporting when the
> goal metric was unrelated to node memory.
>
> This patch introduces a validation step to ensure that nid_show() only
> returns the node ID for valid node-based metrics:
> - DAMOS_QUOTA_NODE_MEM_USED_BP
> - DAMOS_QUOTA_NODE_MEM_FREE_BP
>
> For other metrics, it returns -EINVAL to prevent misleading information.
>
> Tested with KUnit:
> - Built kernel with KUnit and DAMON sysfs tests enabled.
> - Executed KUnit tests:
> ./kunit.py run --kunitconfig ./mm/mm/damon/tests/.kunitconfig
> - All 25 tests passed, including damon_sysfs_test_add_targets.
So nice patch, thank you! I have a comment below, though.
>
> Based on commit 3a8660878839 ("Linux 6.18-rc1").
Maybe this is better to be put under the below comment section [1].
>
> Signed-off-by: Swaraj Gaikwad <swarajgaikwad1925@gmail.com>
> ---
> mm/damon/sysfs-schemes.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c
> index 6536f16006c9..23a73b94fe53 100644
> --- a/mm/damon/sysfs-schemes.c
> +++ b/mm/damon/sysfs-schemes.c
> @@ -1112,7 +1112,16 @@ static ssize_t nid_show(struct kobject *kobj,
> struct damos_sysfs_quota_goal *goal = container_of(kobj, struct
> damos_sysfs_quota_goal, kobj);
>
> - /* todo: return error if the goal is not using nid */
> + switch (goal->metric) {
> + case DAMOS_QUOTA_USER_INPUT:
> + case DAMOS_QUOTA_SOME_MEM_PSI_US:
> + return -EINVAL;
> + case DAMOS_QUOTA_NODE_MEM_USED_BP:
> + case DAMOS_QUOTA_NODE_MEM_FREE_BP:
> + break;
> + default:
> + return -EINVAL;
> + }
>
> return sysfs_emit(buf, "%d\n", goal->nid);
> }
According to 'git bisect', I in the past actually added the todo comment. But,
I of now cannot remember why I in the past did think that's something to do. I
now think this function is better to be simply show the value the user has set
last time, since users could set the metrics after setting nid. Other similar
parameters also work in the way, to be wiring-order independent, so that simple
behavior would be better for consistency, too.
I'm sorry if the wrong todo comment was confusing you, Swaraj. Would you mind
sending a patch removing only the todo comment, without introducing any
behavior change?
[1] https://docs.kernel.org/process/submitting-patches.html#commentary
Thanks,
SJ
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-10-20 15:13 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-20 11:28 [PATCH] mm/damon/sysfs-schemes: Validate nid usage in nid_show() Swaraj Gaikwad
2025-10-20 15:13 ` SeongJae Park
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).