lib/sys_info: handle sys_info_mask==0 case

Generalization of panic_print's dump function [1] has been merged, and
this patchset is to address some remaining issues, like adding note of the
obsoletion of 'panic_print' cmdline parameter, refining the kernel
document for panic_print, and hardening some string management.


This patch (of 4):

It is a normal case that bitmask parameter is 0, so pre-initialize the
names[] to null string to cover this case.

Also remove the superfluous "+1" in names[sizeof(sys_info_avail) + 1],
which is needed for 'strlen()', but not for 'sizeof()'.

Link: https://lkml.kernel.org/r/20250825025701.81921-1-feng.tang@linux.alibaba.com
Link: https://lkml.kernel.org/r/20250825025701.81921-2-feng.tang@linux.alibaba.com
Link: Link: https://lkml.kernel.org/r/20250703021004.42328-1-feng.tang@linux.alibaba.com [1]
Signed-off-by: Feng Tang <feng.tang@linux.alibaba.com>
Suggested-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Cc: Askar Safin <safinaskar@zohomail.com>
Cc: John Ogness <john.ogness@linutronix.de>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Lance Yang <lance.yang@linux.dev>
Cc: "Paul E . McKenney" <paulmck@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Feng Tang 2025-08-25 10:56:58 +08:00 committed by Andrew Morton
parent 13818f7b8c
commit 31cf021b61
1 changed files with 2 additions and 1 deletions

View File

@ -55,7 +55,7 @@ int sysctl_sys_info_handler(const struct ctl_table *ro_table, int write,
void *buffer, size_t *lenp, void *buffer, size_t *lenp,
loff_t *ppos) loff_t *ppos)
{ {
char names[sizeof(sys_info_avail) + 1]; char names[sizeof(sys_info_avail)];
struct ctl_table table; struct ctl_table table;
unsigned long *si_bits_global; unsigned long *si_bits_global;
@ -81,6 +81,7 @@ int sysctl_sys_info_handler(const struct ctl_table *ro_table, int write,
char *delim = ""; char *delim = "";
int i, len = 0; int i, len = 0;
names[0] = '\0';
for (i = 0; i < ARRAY_SIZE(si_names); i++) { for (i = 0; i < ARRAY_SIZE(si_names); i++) {
if (*si_bits_global & si_names[i].bit) { if (*si_bits_global & si_names[i].bit) {
len += scnprintf(names + len, sizeof(names) - len, len += scnprintf(names + len, sizeof(names) - len,