linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dmitry Safonov <dima@arista.com>
To: linux-kernel@vger.kernel.org
Cc: Dmitry Safonov <0x7f454c46@gmail.com>,
	Dmitry Safonov <dima@arista.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jslaby@suse.com>,
	Vasiliy Khoruzhick <vasilykh@arista.com>,
	linux-serial@vger.kernel.org, Iurii Zaikin <yzaikin@google.com>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Kees Cook <keescook@chromium.org>,
	linux-fsdevel@vger.kernel.org
Subject: [PATCH 57/58] sysctl/sysrq: Remove __sysrq_enabled copy
Date: Fri, 13 Dec 2019 00:06:56 +0000	[thread overview]
Message-ID: <20191213000657.931618-58-dima@arista.com> (raw)
In-Reply-To: <20191213000657.931618-1-dima@arista.com>

Many embedded boards have a disconnected TTL level serial which can
generate some garbage that can lead to spurious false sysrq detects.

Currently, sysrq can be either completely disabled for serial console
or always disabled (with CONFIG_MAGIC_SYSRQ_SERIAL), since
commit 732dbf3a6104 ("serial: do not accept sysrq characters via serial port")

At Arista, we have such boards that can generate BREAK and random
garbage. While disabling sysrq for serial console would solve
the problem with spurious false sysrq triggers, it's also desirable
to have a way to enable sysrq back.

Having the way to enable sysrq was beneficial to debug lockups with
a manual investigation in field and on the other side preventing false
sysrq detections.

As a preparation to add sysrq_toggle_support() call into uart,
remove a private copy of sysrq_enabled from sysctl - it should reflect
the actual status of sysrq.

Furthermore, the private copy isn't correct already in case
sysrq_always_enabled is true. So, remove __sysrq_enabled and use a
getter-helper for sysrq enabled status.

Cc: Iurii Zaikin <yzaikin@google.com>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: Luis Chamberlain <mcgrof@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Dmitry Safonov <dima@arista.com>
---
 drivers/tty/sysrq.c   |  7 +++++++
 include/linux/sysrq.h |  1 +
 kernel/sysctl.c       | 41 ++++++++++++++++++++++-------------------
 3 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 1d4f317a0e42..c21067765091 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -73,6 +73,13 @@ static bool sysrq_on_mask(int mask)
 	       (sysrq_enabled & mask);
 }
 
+int sysrq_get_mask(void)
+{
+	if (sysrq_always_enabled)
+		return 1;
+	return sysrq_enabled;
+}
+
 static int __init sysrq_always_enabled_setup(char *str)
 {
 	sysrq_always_enabled = true;
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h
index 8c71874e8485..4a0b351fa2d3 100644
--- a/include/linux/sysrq.h
+++ b/include/linux/sysrq.h
@@ -50,6 +50,7 @@ int unregister_sysrq_key(int key, struct sysrq_key_op *op);
 struct sysrq_key_op *__sysrq_get_key_op(int key);
 
 int sysrq_toggle_support(int enable_mask);
+int sysrq_get_mask(void);
 
 #else
 
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 70665934d53e..66cebf6041b4 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -229,25 +229,8 @@ static int proc_dopipe_max_size(struct ctl_table *table, int write,
 		void __user *buffer, size_t *lenp, loff_t *ppos);
 
 #ifdef CONFIG_MAGIC_SYSRQ
-/* Note: sysrq code uses its own private copy */
-static int __sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE;
-
 static int sysrq_sysctl_handler(struct ctl_table *table, int write,
-				void __user *buffer, size_t *lenp,
-				loff_t *ppos)
-{
-	int error;
-
-	error = proc_dointvec(table, write, buffer, lenp, ppos);
-	if (error)
-		return error;
-
-	if (write)
-		sysrq_toggle_support(__sysrq_enabled);
-
-	return 0;
-}
-
+			void __user *buffer, size_t *lenp, loff_t *ppos);
 #endif
 
 static struct ctl_table kern_table[];
@@ -747,7 +730,7 @@ static struct ctl_table kern_table[] = {
 #ifdef CONFIG_MAGIC_SYSRQ
 	{
 		.procname	= "sysrq",
-		.data		= &__sysrq_enabled,
+		.data		= NULL,
 		.maxlen		= sizeof (int),
 		.mode		= 0644,
 		.proc_handler	= sysrq_sysctl_handler,
@@ -2844,6 +2827,26 @@ static int proc_dostring_coredump(struct ctl_table *table, int write,
 }
 #endif
 
+#ifdef CONFIG_MAGIC_SYSRQ
+static int sysrq_sysctl_handler(struct ctl_table *table, int write,
+				void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+	int tmp, ret;
+
+	tmp = sysrq_get_mask();
+
+	ret = __do_proc_dointvec(&tmp, table, write, buffer,
+			       lenp, ppos, NULL, NULL);
+	if (ret || !write)
+		return ret;
+
+	if (write)
+		sysrq_toggle_support(tmp);
+
+	return 0;
+}
+#endif
+
 static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int write,
 				     void __user *buffer,
 				     size_t *lenp, loff_t *ppos,
-- 
2.24.0


  parent reply	other threads:[~2019-12-13  0:10 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20191213000657.931618-1-dima@arista.com>
2019-12-13  0:06 ` [PATCH 01/58] sysrq: Remove sysrq_handler_registered Dmitry Safonov
2019-12-13  0:06 ` [PATCH 02/58] serial: Move sysrq members above Dmitry Safonov
2019-12-13  7:17   ` Greg Kroah-Hartman
2019-12-13  0:06 ` [PATCH 03/58] serial_core: Un-ifdef sysrq SUPPORT_SYSRQ Dmitry Safonov
2019-12-13  7:18   ` Greg Kroah-Hartman
2019-12-17 13:48   ` Greg Kroah-Hartman
2019-12-17 13:51   ` Greg Kroah-Hartman
2019-12-13  0:06 ` [PATCH 04/58] tty/serial: Migrate aspeed_vuart to use has_sysrq Dmitry Safonov
2019-12-13  1:32   ` Andrew Jeffery
2019-12-13  0:06 ` [PATCH 05/58] tty/serial: Migrate 8250_fsl " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 06/58] tty/serial: Migrate bcm63xx_uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 07/58] tty/serial: Migrate 8250_omap " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 08/58] tty/serial: Migrate 8250_port " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 09/58] tty/serial: Migrate amba-pl01* " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 10/58] tty/serial: Migrate apbuart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 11/58] tty/serial: Migrate arc_uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 12/58] tty/serial: Migrate atmel_serial " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 13/58] tty/serial: Migrate clps711x " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 14/58] tty/serial: Migrate cpm_uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 15/58] tty/serial: Migrate dz " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 16/58] tty/serial: Migrate efm32-uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 17/58] tty/serial: Migrate fsl_linflexuart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 18/58] tty/serial: Migrate fsl_lpuart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 19/58] tty/serial: Migrate imx " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 20/58] tty/serial: Migrate ip22zilog " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 21/58] tty/serial: Migrate meson_uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 22/58] tty/serial: Migrate milbeaut_usio " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 23/58] tty/serial: Migrate mpc52xx_uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 24/58] tty/serial: Don't zero port->sysrq Dmitry Safonov
2019-12-13  0:06 ` [PATCH 25/58] tty/serial: Migrate msm_serial to use has_sysrq Dmitry Safonov
2019-12-13  0:06 ` [PATCH 26/58] tty/serial: Migrate mux " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 27/58] tty/serial: Migrate mxs-auart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 28/58] tty/serial: Migrate omap-serial " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 29/58] tty/serial: Migrate pch_uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 30/58] tty/serial: Don't check port->sysrq Dmitry Safonov
2019-12-13  0:06 ` [PATCH 31/58] tty/serial: Migrate pmac_zilog to use has_sysrq Dmitry Safonov
2019-12-13  0:06 ` [PATCH 32/58] tty/serial: Migrate pnx8xxx_uart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 33/58] serial/f81534: Don't check port->sysrq Dmitry Safonov
2019-12-16 12:10   ` Johan Hovold
2019-12-16 16:36     ` Dmitry Safonov
2019-12-13  0:06 ` [PATCH 34/58] tty/serial: Migrate pxa to use has_sysrq Dmitry Safonov
2019-12-13  0:06 ` [PATCH 35/58] tty/serial: Migrate qcom_geni_serial " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 36/58] tty/serial: Migrate sa1100 " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 37/58] tty/serial: Migrate samsung_tty " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 38/58] tty/serial: Migrate sb1250-duart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 39/58] tty/serial: Migrate sccnxp " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 40/58] tty/serial: Migrate serial_txx9 " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 41/58] tty/serial: Migrate sh-sci " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 42/58] tty/serial: Migrate sprd_serial " Dmitry Safonov
2019-12-16  2:30   ` Chunyan Zhang
2019-12-13  0:06 ` [PATCH 43/58] tty/serial: Migrate st-asc " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 44/58] tty/serial: Migrate stm32-usart " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 45/58] tty/serial: Migrate sunhv " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 46/58] tty/serial: Migrate sunsab " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 47/58] tty/serial: Migrate sunsu " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 48/58] tty/serial: Migrate sunzilog " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 49/58] serial/ucc_uart: Remove ifdef SUPPORT_SYSRQ Dmitry Safonov
2019-12-13  0:06 ` [PATCH 50/58] tty/serial: Migrate vr41xx_siu to use has_sysrq Dmitry Safonov
2019-12-13  0:06 ` [PATCH 51/58] tty/serial: Migrate vt8500_serial " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 52/58] tty/serial: Migrate xilinx_uartps " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 53/58] tty/serial: Migrate zs " Dmitry Safonov
2019-12-13  0:06 ` [PATCH 54/58] serial_core: Remove SUPPORT_SYSRQ ifdeffery Dmitry Safonov
2019-12-17 14:27   ` Greg Kroah-Hartman
2019-12-17 15:50     ` Dmitry Safonov
2019-12-13  0:06 ` [PATCH 55/58] usb/serial: Don't handle break when CONFIG_MAGIC_SYSRQ is disabled Dmitry Safonov
2019-12-13  0:06 ` [PATCH 56/58] serial_core: Move sysrq functions from header file Dmitry Safonov
2019-12-13  0:06 ` Dmitry Safonov [this message]
2019-12-13  0:06 ` [PATCH 58/58] serial/sysrq: Add MAGIC_SYSRQ_SERIAL_SEQUENCE Dmitry Safonov

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=20191213000657.931618-58-dima@arista.com \
    --to=dima@arista.com \
    --cc=0x7f454c46@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.com \
    --cc=keescook@chromium.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=vasilykh@arista.com \
    --cc=yzaikin@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).