From: "Li,Rongqing" <lirongqing@baidu.com>
To: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, "Mel Gorman" <mgorman@suse.de>,
Valentin Schneider <vschneid@redhat.com>,
"K Prateek Nayak" <kprateek.nayak@amd.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Zhan Xusheng <zhanxusheng1024@gmail.com>
Subject: 答复: [PATCH v2] sched/debug: reject invalid writes to numa_balancing scan_size_mb
Date: Fri, 31 Jul 2026 14:07:11 +0000 [thread overview]
Message-ID: <cbf5e9c8984346f7a35bef09abb558e7@baidu.com> (raw)
In-Reply-To: <20260723082144.2190-1-lirongqing@baidu.com>
>
> From: Li RongQing <lirongqing@baidu.com>
>
> The sysctl_numa_balancing_scan_size parameter is currently registered via
> debugfs_create_u32(), which accepts any u32 value including 0. A zero value
> triggers division-by-zero in two code paths:
>
> task_scan_min():
> windows = MAX_SCAN_WINDOW / scan_size;
>
> task_nr_scan_windows():
> rss = round_up(rss, nr_scan_pages);
> return rss / nr_scan_pages;
>
> Similarly, values exceeding UINT_MAX would be silently truncated by the
> write path before reaching this handler, potentially accepting unintended
> values. Reject them explicitly with -ERANGE
>
> Replace the debugfs_create_u32() interface with a custom file_operations
> handler that validates writes: reject 0 and values exceeding UINT_MAX with
> -ERANGE. Since the ops use DEFINE_DEBUGFS_ATTRIBUTE() which already
> provides removal protection via debugfs_file_get()/put(),
> debugfs_create_file_unsafe() is used instead of debugfs_create_file() to avoid
> an unnecessary full_proxy layer.
>
> Fixes: 8a99b6833c88 ("sched: Move SCHED_DEBUG sysctl to debugfs")
> Signed-off-by: Li RongQing <lirongqing@baidu.com>
Ping
[Li,Rongqing]
> ---
> Diff with v1: replace debugfs_create_file with debugfs_create_file_unsafe;
> and rewrite commit message
>
> kernel/sched/debug.c | 23 ++++++++++++++++++++++-
> 1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index
> 40584b2..391a669 100644
> --- a/kernel/sched/debug.c
> +++ b/kernel/sched/debug.c
> @@ -633,6 +633,26 @@ static void debugfs_fair_server_init(void)
> }
> }
>
> +#ifdef CONFIG_NUMA_BALANCING
> +static int numa_scan_size_get(void *data, u64 *val) {
> + *val = *(u32 *)data;
> + return 0;
> +}
> +
> +static int numa_scan_size_set(void *data, u64 val) {
> + if (val == 0 || val > UINT_MAX)
> + return -ERANGE;
> +
> + *(u32 *)data = (u32)val;
> + return 0;
> +}
> +
> +DEFINE_DEBUGFS_ATTRIBUTE(numa_scan_size_fops, numa_scan_size_get,
> + numa_scan_size_set, "%llu\n");
> +#endif /* CONFIG_NUMA_BALANCING */
> +
> static __init int sched_init_debug(void) {
> struct dentry __maybe_unused *numa, *llc; @@ -664,7 +684,8 @@
> static __init int sched_init_debug(void)
> debugfs_create_u32("scan_delay_ms", 0644, numa,
> &sysctl_numa_balancing_scan_delay);
> debugfs_create_u32("scan_period_min_ms", 0644, numa,
> &sysctl_numa_balancing_scan_period_min);
> debugfs_create_u32("scan_period_max_ms", 0644, numa,
> &sysctl_numa_balancing_scan_period_max);
> - debugfs_create_u32("scan_size_mb", 0644, numa,
> &sysctl_numa_balancing_scan_size);
> + debugfs_create_file_unsafe("scan_size_mb", 0644, numa,
> + &sysctl_numa_balancing_scan_size,
> &numa_scan_size_fops);
> debugfs_create_u32("hot_threshold_ms", 0644, numa,
> &sysctl_numa_balancing_hot_threshold);
> #endif /* CONFIG_NUMA_BALANCING */
>
> --
> 2.9.4
prev parent reply other threads:[~2026-07-31 14:18 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 8:21 [PATCH v2] sched/debug: reject invalid writes to numa_balancing scan_size_mb lirongqing
2026-07-31 14:07 ` Li,Rongqing [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cbf5e9c8984346f7a35bef09abb558e7@baidu.com \
--to=lirongqing@baidu.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=zhanxusheng1024@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.