All of lore.kernel.org
 help / color / mirror / Atom feed
* + init-arch-make-config_command_line_size-globally-configurable.patch added to mm-nonmm-unstable branch
@ 2026-08-29 23:36 Andrew Morton
  0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2026-08-29 23:36 UTC (permalink / raw)
  To: mm-commits, svens, palmer, maze, hca, gor, borntraeger, arnd, aou,
	alex, agordeev, wfelipe, akpm

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 12589 bytes --]


The patch titled
     Subject: init, arch: make CONFIG_COMMAND_LINE_SIZE globally configurable
has been added to the -mm mm-nonmm-unstable branch.  Its filename is
     init-arch-make-config_command_line_size-globally-configurable.patch

This patch will shortly appear at
     https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/init-arch-make-config_command_line_size-globally-configurable.patch

This patch will later appear in the mm-nonmm-unstable branch at
    git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm

Before you just go and hit "reply", please:
   a) Consider who else should be cc'ed
   b) Prefer to cc a suitable mailing list as well
   c) Ideally: find the original patch on the mailing list and do a
      reply-to-all to that, adding suitable additional cc's

*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***

The -mm tree is included into linux-next via various
branches at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
and is updated there most days

------------------------------------------------------
From: Wilson Felipe Pereira <wfelipe@google.com>
Subject: init, arch: make CONFIG_COMMAND_LINE_SIZE globally configurable
Date: Tue, 18 Aug 2026 23:16:32 +0000

Currently, s390 has the ability to configure the maximum kernel command
line size via Kconfig (CONFIG_COMMAND_LINE_SIZE).  Other architectures
define a hardcoded COMMAND_LINE_SIZE macro in their setup.h headers.

In some use cases, such as netboot kernels, rootfs configurations, or
larger initramfs setups, a larger command line size is required.  While
for embedded workloads, it can be reduced to save memory.

Move CONFIG_COMMAND_LINE_SIZE out of arch/s390/Kconfig and into
init/Kconfig under General setup, and update every architecture's setup.h
header to define COMMAND_LINE_SIZE as CONFIG_COMMAND_LINE_SIZE.

For user-space API (uapi) headers, wrap the definition in an `#ifdef
__KERNEL__` guard and retain the historical hardcoded default in the
`#else` block.  When user-space headers are installed via `make
headers_install`, unifdef strips out the kernel section, ensuring the same
value as before for user-space applications including `<asm/setup.h>`.

For S390, the range is kept the same, but other architectures have varying
constraints.  S390 requires a minimum of 896 bytes to protect legacy
bootloaders from overwriting the .text section.  ARM, M68K, and NIOS2
allocate the command line directly on severely constrained decompressor
stacks, so their ranges are strictly capped at 2048 bytes to prevent
deterministic stack exhaustion and boot panics.  PowerPC (PPC) boot
wrappers silently truncate arguments past 2048 bytes, so it is also capped
at 2048 to prevent silent parameter loss.

The SuperH (SUPERH) boot parameter page allocates exactly PAGE_SIZE
(typically 4096 bytes), and placing a 4096-byte command line starting at
offset 256 would cause strscpy() to read out of bounds; it is capped at
3840 bytes.  Alpha physically limits its boot parameter block to 256
bytes, so its limit is strictly locked to 256.  All other architectures
are capped at 4096 bytes to prevent unreasonable allocations.

Link: https://lore.kernel.org/20260818231646.804507-2-wfelipe@google.com
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: Wilson Felipe Pereira <wfelipe@google.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 arch/alpha/include/uapi/asm/setup.h      |    4 ++++
 arch/arc/include/asm/setup.h             |    2 +-
 arch/arm/include/uapi/asm/setup.h        |    6 +++++-
 arch/arm64/include/uapi/asm/setup.h      |    4 ++++
 arch/loongarch/include/uapi/asm/setup.h  |    4 ++++
 arch/m68k/include/uapi/asm/setup.h       |    6 +++++-
 arch/microblaze/include/uapi/asm/setup.h |    4 ++++
 arch/mips/include/uapi/asm/setup.h       |    4 ++++
 arch/parisc/include/uapi/asm/setup.h     |    4 ++++
 arch/powerpc/include/uapi/asm/setup.h    |    4 ++++
 arch/riscv/include/uapi/asm/setup.h      |    4 ++++
 arch/s390/Kconfig                        |    8 --------
 arch/sparc/include/uapi/asm/setup.h      |   10 +++++++---
 arch/um/include/asm/setup.h              |    2 +-
 arch/x86/include/asm/setup.h             |    2 +-
 arch/xtensa/include/uapi/asm/setup.h     |    4 ++++
 include/uapi/asm-generic/setup.h         |    4 ++++
 init/Kconfig                             |   16 ++++++++++++++++
 18 files changed, 76 insertions(+), 16 deletions(-)

--- a/arch/alpha/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/alpha/include/uapi/asm/setup.h
@@ -2,6 +2,10 @@
 #ifndef _UAPI__ALPHA_SETUP_H
 #define _UAPI__ALPHA_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	256
+#endif
 
 #endif /* _UAPI__ALPHA_SETUP_H */
--- a/arch/arc/include/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/arc/include/asm/setup.h
@@ -9,7 +9,7 @@
 #include <linux/types.h>
 #include <uapi/asm/setup.h>
 
-#define COMMAND_LINE_SIZE 256
+#define COMMAND_LINE_SIZE CONFIG_COMMAND_LINE_SIZE
 
 /*
  * Data structure to map a ID to string
--- a/arch/arm64/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/arm64/include/uapi/asm/setup.h
@@ -22,6 +22,10 @@
 
 #include <linux/types.h>
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	2048
+#endif
 
 #endif
--- a/arch/arm/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/arm/include/uapi/asm/setup.h
@@ -17,7 +17,11 @@
 
 #include <linux/types.h>
 
-#define COMMAND_LINE_SIZE 1024
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
+#define COMMAND_LINE_SIZE	1024
+#endif
 
 /* The list ends with an ATAG_NONE node. */
 #define ATAG_NONE	0x00000000
--- a/arch/loongarch/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/loongarch/include/uapi/asm/setup.h
@@ -3,6 +3,10 @@
 #ifndef _UAPI_ASM_LOONGARCH_SETUP_H
 #define _UAPI_ASM_LOONGARCH_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	4096
+#endif
 
 #endif /* _UAPI_ASM_LOONGARCH_SETUP_H */
--- a/arch/m68k/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/m68k/include/uapi/asm/setup.h
@@ -12,6 +12,10 @@
 #ifndef _UAPI_M68K_SETUP_H
 #define _UAPI_M68K_SETUP_H
 
-#define COMMAND_LINE_SIZE 256
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
+#define COMMAND_LINE_SIZE	256
+#endif
 
 #endif /* _UAPI_M68K_SETUP_H */
--- a/arch/microblaze/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/microblaze/include/uapi/asm/setup.h
@@ -12,6 +12,10 @@
 #ifndef _UAPI_ASM_MICROBLAZE_SETUP_H
 #define _UAPI_ASM_MICROBLAZE_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	256
+#endif
 
 #endif /* _UAPI_ASM_MICROBLAZE_SETUP_H */
--- a/arch/mips/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/mips/include/uapi/asm/setup.h
@@ -2,7 +2,11 @@
 #ifndef _UAPI_MIPS_SETUP_H
 #define _UAPI_MIPS_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	4096
+#endif
 
 
 #endif /* _UAPI_MIPS_SETUP_H */
--- a/arch/parisc/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/parisc/include/uapi/asm/setup.h
@@ -2,6 +2,10 @@
 #ifndef _PARISC_SETUP_H
 #define _PARISC_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	1024
+#endif
 
 #endif /* _PARISC_SETUP_H */
--- a/arch/powerpc/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/powerpc/include/uapi/asm/setup.h
@@ -2,6 +2,10 @@
 #ifndef _UAPI_ASM_POWERPC_SETUP_H
 #define _UAPI_ASM_POWERPC_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	2048
+#endif
 
 #endif /* _UAPI_ASM_POWERPC_SETUP_H */
--- a/arch/riscv/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/riscv/include/uapi/asm/setup.h
@@ -3,6 +3,10 @@
 #ifndef _UAPI_ASM_RISCV_SETUP_H
 #define _UAPI_ASM_RISCV_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	2048
+#endif
 
 #endif /* _UAPI_ASM_RISCV_SETUP_H */
--- a/arch/s390/Kconfig~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/s390/Kconfig
@@ -521,14 +521,6 @@ endchoice
 config 64BIT
 	def_bool y
 
-config COMMAND_LINE_SIZE
-	int "Maximum size of kernel command line"
-	default 4096
-	range 896 1048576
-	help
-	  This allows you to specify the maximum length of the kernel command
-	  line.
-
 config SMP
 	def_bool y
 
--- a/arch/sparc/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/sparc/include/uapi/asm/setup.h
@@ -6,10 +6,14 @@
 #ifndef _UAPI_SPARC_SETUP_H
 #define _UAPI_SPARC_SETUP_H
 
-#if defined(__sparc__) && defined(__arch64__)
-# define COMMAND_LINE_SIZE 2048
+#ifdef __KERNEL__
+# define COMMAND_LINE_SIZE CONFIG_COMMAND_LINE_SIZE
 #else
-# define COMMAND_LINE_SIZE 256
+# if defined(__sparc__) && defined(__arch64__)
+#  define COMMAND_LINE_SIZE 2048
+# else
+#  define COMMAND_LINE_SIZE 256
+# endif
 #endif
 
 
--- a/arch/um/include/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/um/include/asm/setup.h
@@ -6,6 +6,6 @@
  * command line, so this choice is ok.
  */
 
-#define COMMAND_LINE_SIZE 4096
+#define COMMAND_LINE_SIZE CONFIG_COMMAND_LINE_SIZE
 
 #endif		/* SETUP_H_INCLUDED */
--- a/arch/x86/include/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/x86/include/asm/setup.h
@@ -4,7 +4,7 @@
 
 #include <uapi/asm/setup.h>
 
-#define COMMAND_LINE_SIZE 2048
+#define COMMAND_LINE_SIZE CONFIG_COMMAND_LINE_SIZE
 
 #include <linux/linkage.h>
 #include <asm/page_types.h>
--- a/arch/xtensa/include/uapi/asm/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/arch/xtensa/include/uapi/asm/setup.h
@@ -12,6 +12,10 @@
 #ifndef _XTENSA_SETUP_H
 #define _XTENSA_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	256
+#endif
 
 #endif
--- a/include/uapi/asm-generic/setup.h~init-arch-make-config_command_line_size-globally-configurable
+++ a/include/uapi/asm-generic/setup.h
@@ -2,6 +2,10 @@
 #ifndef __ASM_GENERIC_SETUP_H
 #define __ASM_GENERIC_SETUP_H
 
+#ifdef __KERNEL__
+#define COMMAND_LINE_SIZE	CONFIG_COMMAND_LINE_SIZE
+#else
 #define COMMAND_LINE_SIZE	512
+#endif
 
 #endif	/* __ASM_GENERIC_SETUP_H */
--- a/init/Kconfig~init-arch-make-config_command_line_size-globally-configurable
+++ a/init/Kconfig
@@ -1607,6 +1607,22 @@ config CMDLINE_FROM_BOOTCONFIG
 
 	  If unsure, say N.
 
+config COMMAND_LINE_SIZE
+	int "Maximum size of kernel command line"
+	default 4096 if S390 || LOONGARCH || MIPS || UML
+	default 2048 if X86 || ARM64 || PPC || SPARC64 || RISCV
+	default 1024 if ARM || PARISC
+	default 256 if ALPHA || ARC || M68K || MICROBLAZE || SPARC32 || XTENSA
+	default 512
+	range 896 1048576 if S390
+	range 256 2048 if ARM || M68K || NIOS2 || PPC
+	range 256 3840 if SUPERH
+	range 256 256 if ALPHA
+	range 256 4096
+	help
+	  This allows you to specify the maximum length of the kernel command
+	  line.
+
 config CMDLINE_LOG_WRAP_IDEAL_LEN
 	int "Length to try to wrap the cmdline when logged at boot"
 	default 1021
_

Patches currently in -mm which might be from wfelipe@google.com are

selftests-cgroup-test_zswap-wait-for-cgroup-to-unpopulate-in-test_zswap_writeback.patch
selftests-cgroup-test_zswap-fix-implicit-unsigned-promotion-bug-in-test_no_kmem_bypass.patch
init-arch-make-config_command_line_size-globally-configurable.patch
init-kconfig-make-config-init_env_arg_limit-user-configurable.patch


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-29 23:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-29 23:36 + init-arch-make-config_command_line_size-globally-configurable.patch added to mm-nonmm-unstable branch Andrew Morton

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.