Received: by 2002:a05:7412:b101:b0:e2:908c:2ebd with SMTP id az1csp2498002rdb; Wed, 15 Nov 2023 02:28:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IE+ccqYXZRX9zwy5WsmAL9OHtHSD8JdX1l40NsgiLqFxYMzT1V6KuxYp8GqFdcQqzRpbOhn X-Received: by 2002:aca:2312:0:b0:3ae:126b:8bfc with SMTP id e18-20020aca2312000000b003ae126b8bfcmr14105804oie.4.1700044097446; Wed, 15 Nov 2023 02:28:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700044097; cv=none; d=google.com; s=arc-20160816; b=XRIYVNK5r6xSc1evn2mHTAEtCzU/oNg419FwTxjXMfCjirBYCszg7qGqutuIjLwgxi mASFUhbxomggos1IpC7E43JlrpNDgPu22Ta09qDG5NYDLGtkxD64t+1ii2sJ00EMkjTI VA9ERQl5e71DkvN4cabepmy1TlccHmsCc+ZfFwgPJsten0hT67iMcIUXY2OwuUrigrPp M8U8YoVkUCP/jGwuDBn3RSUJyIapzlSHY2McrhNj3J9J6jDKr7o6e6q23qn5jDCtOrxn i9k3ZgPdddHx7bXnGAoRPxjmpuB+ztmNeLUnjHR95ClLZz8KSEY06B2OkYkTIkSQ5C8s QvYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=AAnq+5lVj1pI5IP8tVCn0tHJbY6Y1QaXS/LD3cEo7rY=; fh=6j36m1jHKU7KTFZCDlX/JQDgr7Jf8Wr470TB4VSI5uk=; b=wYQeOLcZ8ToR2KspgmUEOpWNe0OQ86N/p0rNNWN6AVI+g/yDe6fv+GgL1INFTm6udz +Lz8ce5twpIRMQN+1OYES1Qiqlo7OUM7wuTC/gEUTP5ZSkrcFD4iM9e7G2uxsXVPWgWt MeJIUh2CKsy4fXoSLBe8Gt2K0HIkQaT+BFDDp4RepTQ+PHxDuvaiCGY9QNQ6AwLnzwzs ri1XoMJO+li1FiOwHmf5aFr0G5OmxyoXTqdo2kRw7FYbGVXL3cJOsVkIfCq9kZ5jECgq oDDXHzplOg+GQxJpMcjgq3rPTYYuT2TVoZGbTbDTDV3kKPIHFFFVD/lKL8GIuN9tZmqS 3qTQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id f1-20020a6547c1000000b005b804d972a2si10461808pgs.490.2023.11.15.02.28.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Nov 2023 02:28:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 5C00A803B505; Wed, 15 Nov 2023 02:28:14 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234114AbjKOK14 (ORCPT + 99 others); Wed, 15 Nov 2023 05:27:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38196 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230336AbjKOK1z (ORCPT ); Wed, 15 Nov 2023 05:27:55 -0500 Received: from harvie.cz (harvie.cz [77.87.242.242]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 34105C2; Wed, 15 Nov 2023 02:27:52 -0800 (PST) Received: from anemophobia.amit.cz (unknown [31.30.84.130]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by harvie.cz (Postfix) with ESMTPSA id B42BF1802A6; Wed, 15 Nov 2023 11:27:49 +0100 (CET) From: Tomas Mudrunka To: jirislaby@kernel.org Cc: corbet@lwn.net, gregkh@linuxfoundation.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, rdunlap@infradead.org, tomas.mudrunka@gmail.com Subject: [PATCH v7] /proc/sysrq-trigger: accept multiple keys at once Date: Wed, 15 Nov 2023 11:27:44 +0100 Message-ID: <20231115102744.192576-1-tomas.mudrunka@gmail.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <670993bf-a8ef-4561-8213-6a37d0598d83@kernel.org> References: <670993bf-a8ef-4561-8213-6a37d0598d83@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=0.5 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, FORGED_GMAIL_RCVD,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 15 Nov 2023 02:28:14 -0800 (PST) Just for convenience. This way we can do: `echo _reisub > /proc/sysrq-trigger` Instead of: `for i in r e i s u b; do echo "$i" > /proc/sysrq-trigger; done;` This can be very useful when trying to execute sysrq combo remotely or from userspace. When sending keys in multiple separate writes, userspace can be killed before whole combo is completed. Therefore putting all keys in single write is more robust approach. Signed-off-by: Tomas Mudrunka --- Documentation/admin-guide/sysrq.rst | 11 ++++++++++- drivers/tty/sysrq.c | 18 +++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Documentation/admin-guide/sysrq.rst b/Documentation/admin-guide/sysrq.rst index 51906e473..fbe79d314 100644 --- a/Documentation/admin-guide/sysrq.rst +++ b/Documentation/admin-guide/sysrq.rst @@ -75,10 +75,19 @@ On other submit a patch to be included in this section. On all - Write a character to /proc/sysrq-trigger. e.g.:: + Write single character to /proc/sysrq-trigger. + Only the first character is processed, the rest of string is ignored. + However, it is not recommended to write any extra characters + as the behavior is undefined and might change in the future versions. + E.g.:: echo t > /proc/sysrq-trigger + Alternatively, write multiple characters prepended by underscore. + This way, all characters will be processed. E.g.:: + + echo _reisub > /proc/sysrq-trigger + The :kbd:`` is case sensitive. What are the 'command' keys? diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c index 6b4a28bcf..5411351e4 100644 --- a/drivers/tty/sysrq.c +++ b/drivers/tty/sysrq.c @@ -1150,16 +1150,28 @@ EXPORT_SYMBOL(unregister_sysrq_key); #ifdef CONFIG_PROC_FS /* * writing 'C' to /proc/sysrq-trigger is like sysrq-C + * Normally only the first character written is processed. + * If first character is underscore, all characters are processed. */ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { - if (count) { + bool bulk = false; + size_t i; + + for (i = 0; i < count; i++) { char c; - if (get_user(c, buf)) + if (get_user(c, buf + i)) return -EFAULT; - __handle_sysrq(c, false); + + if (c == '_') + bulk = true; + else + __handle_sysrq(c, false); + + if (!bulk) + break; } return count; -- 2.42.1