mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 23:59:33 -04:00
mm/damon/core-kunit: skip wrong quota goal walk in commit_quota_goals()
damos_test_commit_quota_goals_for() traverses damos quota goals after
damos_commit_quota_goals() call. It assumes damos_commit_quota_goals()
made expected numbers of goals. It might not. Because the traversal is
made based on destination struct length, it could do out of bounds access
for source expectation value array.
The consequent user impact (out-of-bound access ) is quite bad. The
realistic user impact would be limited though. It would affect only test
run setups.
Fix it by testing if the number of goals was also changed as expected and
exit early for the failure.
The issue was discovered [1] by Sashiko.
Link: https://lore.kernel.org/20260718001442.87129-7-sj@kernel.org
Link: https://lore.kernel.org/20260713144757.39740-1-sj@kernel.org [1]
Fixes: d9adfb8a28 ("mm/damon/tests/core-kunit: add damos_commit_quota_goals() test")
Signed-off-by: SJ Park <sj@kernel.org>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: <stable@vger.kernel.org> # 6.19.x
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
@@ -839,6 +839,7 @@ static void damos_test_commit_quota_goals_for(struct kunit *test,
|
||||
struct damos_quota_goal *goal, *next;
|
||||
bool skip = true;
|
||||
int i;
|
||||
int nr_dst = 0, nr_src = 0;
|
||||
|
||||
INIT_LIST_HEAD(&dst.goals);
|
||||
INIT_LIST_HEAD(&src.goals);
|
||||
@@ -861,6 +862,14 @@ static void damos_test_commit_quota_goals_for(struct kunit *test,
|
||||
|
||||
damos_commit_quota_goals(&dst, &src);
|
||||
|
||||
damos_for_each_quota_goal(goal, &dst)
|
||||
nr_dst++;
|
||||
damos_for_each_quota_goal(goal, &src)
|
||||
nr_src++;
|
||||
KUNIT_EXPECT_EQ(test, nr_dst, nr_src);
|
||||
if (nr_dst != nr_src)
|
||||
goto out;
|
||||
|
||||
i = 0;
|
||||
damos_for_each_quota_goal(goal, (&dst)) {
|
||||
KUNIT_EXPECT_EQ(test, goal->metric, src_goals[i].metric);
|
||||
|
||||
Reference in New Issue
Block a user