--- /dev/null
+From 8001f49394e353f035306a45bcf504f06fca6355 Mon Sep 17 00:00:00 2001
+From: Krister Johansen <kjlx@templeofstupid.com>
+Date: Fri, 27 Oct 2023 14:46:40 -0700
+Subject: proc: sysctl: prevent aliased sysctls from getting passed to init
+
+From: Krister Johansen <kjlx@templeofstupid.com>
+
+commit 8001f49394e353f035306a45bcf504f06fca6355 upstream.
+
+The code that checks for unknown boot options is unaware of the sysctl
+alias facility, which maps bootparams to sysctl values. If a user sets
+an old value that has a valid alias, a message about an invalid
+parameter will be printed during boot, and the parameter will get passed
+to init. Fix by checking for the existence of aliased parameters in the
+unknown boot parameter code. If an alias exists, don't return an error
+or pass the value to init.
+
+Signed-off-by: Krister Johansen <kjlx@templeofstupid.com>
+Cc: stable@vger.kernel.org
+Fixes: 0a477e1ae21b ("kernel/sysctl: support handling command line aliases")
+Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
+Signed-off-by: Krister Johansen <kjlx@templeofstupid.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/proc/proc_sysctl.c | 7 +++++++
+ include/linux/sysctl.h | 6 ++++++
+ init/main.c | 4 ++++
+ 3 files changed, 17 insertions(+)
+
+--- a/fs/proc/proc_sysctl.c
++++ b/fs/proc/proc_sysctl.c
+@@ -1780,6 +1780,13 @@ static const char *sysctl_find_alias(cha
+ return NULL;
+ }
+
++bool sysctl_is_alias(char *param)
++{
++ const char *alias = sysctl_find_alias(param);
++
++ return alias != NULL;
++}
++
+ /* Set sysctl value passed on kernel command line. */
+ static int process_sysctl_arg(char *param, char *val,
+ const char *unused, void *arg)
+--- a/include/linux/sysctl.h
++++ b/include/linux/sysctl.h
+@@ -210,6 +210,7 @@ extern void __register_sysctl_init(const
+ const char *table_name);
+ #define register_sysctl_init(path, table) __register_sysctl_init(path, table, #table)
+ void do_sysctl_args(void);
++bool sysctl_is_alias(char *param);
+
+ extern int pwrsw_enabled;
+ extern int unaligned_enabled;
+@@ -251,6 +252,11 @@ static inline void setup_sysctl_set(stru
+ static inline void do_sysctl_args(void)
+ {
+ }
++
++static inline bool sysctl_is_alias(char *param)
++{
++ return false;
++}
+ #endif /* CONFIG_SYSCTL */
+
+ int sysctl_max_threads(struct ctl_table *table, int write, void *buffer,
+--- a/init/main.c
++++ b/init/main.c
+@@ -540,6 +540,10 @@ static int __init unknown_bootoption(cha
+ {
+ size_t len = strlen(param);
+
++ /* Handle params aliased to sysctls */
++ if (sysctl_is_alias(param))
++ return 0;
++
+ repair_env_string(param, val);
+
+ /* Handle obsolete-style parameters */