Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1515423ybz; Thu, 30 Apr 2020 00:19:16 -0700 (PDT) X-Google-Smtp-Source: APiQypJdl8zHd9XfNE0nkmtyySgkRQ+zcGzZMC/haspGoeXwoXVeIh1u5iniTcXhVBh6qBuXrarg X-Received: by 2002:a17:907:40f2:: with SMTP id no2mr1470332ejb.41.1588231155891; Thu, 30 Apr 2020 00:19:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588231155; cv=none; d=google.com; s=arc-20160816; b=hrn8ykGDSQLOEpTGaG9+N25NlB30jKPm4Jjnz2N/SlDi003PdW/kjBUfcULzS7ChVl c3NyZmbavJp++xRSkidBdOAjDChJngKCbwSrjvWZcmXEITthdMTcl2kqTZZAgt9uJ7QF 94jkTFDAclLlWhuhnGS/99CAB2hP2ddL0ttwoRunxDo5akQq/szfGX51HZ1tJDQMPGx1 v7qHy/tPbbZ3Kxi1bsBRF2th/a6sLHdGYy2/zPtm7/cqvZrITSBh4zCsWRwqsoqWKBYb ZPXEWgDc3u4/Ck4W1dKg+NYkQnfz1LFiEkmlkKR02wxkg6tZkHB3CTU9esMkNtMgdXbg HWfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:cc:to:from :dkim-signature; bh=MCF4uYzz7F8p7ezZgMR/XpDxwDlhjV1t3xDjOnjcv0g=; b=V5m0avbShz/790Iz/axyDY0DuJAsJ2pXPFqMgBlq8z9zuN+MD48VDOb2lXNtRlXmrv usBDOv/0/Vx6iSk/3rA0OquCjiNptpJG15y55qtSgsxovXxdWTbPJZRgFyu6lpBmlqao JkvsQouvXNAOYM6Nk7wfFma/zA1Ny42CeIm6UlSAA5DsNKFFERwjq//cjyUCLh04y/5u zTqHHSssABzsS226oE7Smi46ptjlZPh4lbk+MlO1q9mux9WEY3FojZB6EiRGgevI4e4I ayElcCikM4VvrCOIwUURNMjsiwgKFnBtXW32VJ+zE68a8aY05FEYh572NJDzhJeex3wO CXbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@cs.msu.ru header.s=dkim header.b="jK/eik5o"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cs.msu.ru Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c94si4913961edf.446.2020.04.30.00.18.51; Thu, 30 Apr 2020 00:19:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@cs.msu.ru header.s=dkim header.b="jK/eik5o"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cs.msu.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726758AbgD3HQq (ORCPT + 99 others); Thu, 30 Apr 2020 03:16:46 -0400 Received: from mail.cs.msu.ru ([188.44.42.39]:50463 "EHLO mail.cs.msu.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726412AbgD3HQo (ORCPT ); Thu, 30 Apr 2020 03:16:44 -0400 X-Greylist: delayed 1989 seconds by postgrey-1.27 at vger.kernel.org; Thu, 30 Apr 2020 03:16:42 EDT DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=cs.msu.ru; s=dkim; h=Subject:Content-Transfer-Encoding:Content-Type:MIME-Version: References:In-Reply-To:Message-Id:Date:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=MCF4uYzz7F8p7ezZgMR/XpDxwDlhjV1t3xDjOnjcv0g=; b=jK/eik5oO4DUBeovMYOGZQDeET +6RSThmOVSvh1cJXdCq2stRPQYcRSWUU+FoZGiNOjPee+4ndh54dFCbWc+8wie9XNZtPY0FOb+p5X GJL69YgWKZhx2e/l0uQJd3ls4AqfiFJny/Atg5CgMElvFtpIxCZGypbpHdKxL7T5v1/IOKM279gB/ TqEXLFUikP0VYfi003El6Avh/FuVZ/oLBOHy7cPFyPIVnvz1vBmPM975nFZUhAMQ5IrunOImkxoJs b9quQUZr6SkZYu6X0HPFXZuxfxqcYKcnO/N6xmVzUyxnO9NJFyWfMLoIwDocFLCIBoVz3YyyeOCjI uZxPUYew==; Received: from [37.204.119.143] (port=42272 helo=localhost.localdomain) by mail.cs.msu.ru with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93.0.4 (FreeBSD)) (envelope-from ) id 1jU2uv-000B4I-4v; Thu, 30 Apr 2020 09:43:29 +0300 From: Arseny Maslennikov To: Greg Kroah-Hartman , Jiri Slaby , linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Arseny Maslennikov , Rob Landley , "Eric W. Biederman" , Pavel Machek , linux-api@vger.kernel.org, "Vladimir D. Seleznev" Date: Thu, 30 Apr 2020 09:42:57 +0300 Message-Id: <20200430064301.1099452-4-ar@cs.msu.ru> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200430064301.1099452-1-ar@cs.msu.ru> References: <20200430064301.1099452-1-ar@cs.msu.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 37.204.119.143 X-SA-Exim-Mail-From: ar@cs.msu.ru X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mail.cs.msu.ru X-Spam-Level: X-Spam-Status: No, score=-5.1 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_ALL autolearn=no autolearn_force=no version=3.4.4 Subject: [PATCH v3 3/7] n_tty: Send SIGINFO to fg pgrp on status request character X-SA-Exim-Version: 4.2.1 X-SA-Exim-Scanned: Yes (on mail.cs.msu.ru) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org No kerninfo line is printed yet. No existing implementation of this on any Unix-like system echoes the status character; no existing implementation discards or flushes pending input on VSTATUS receipt. Thus we do neither. There are existing popular TUI applications (e. g. mutt) that only turn off icanon and not iexten, but still do not expect any special treatment of the status request character — so we require all three: isig, icanon and iexten to trigger this. Signed-off-by: Arseny Maslennikov --- drivers/tty/n_tty.c | 15 +++++++++++++-- include/linux/tty.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c index 1794d84e7..10d6b60a5 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c @@ -79,6 +79,10 @@ #define ECHO_BLOCK 256 #define ECHO_DISCARD_WATERMARK N_TTY_BUF_SIZE - (ECHO_BLOCK + 32) +#define SIG_FLUSHING_MASK ( \ + rt_sigmask(SIGINT) | rt_sigmask(SIGQUIT) | \ + rt_sigmask(SIGTSTP) ) +#define SIG_FLUSHING(sig) ((1 << sig) & SIG_FLUSHING_MASK) #undef N_TTY_TRACE #ifdef N_TTY_TRACE @@ -1122,7 +1126,7 @@ static void isig(int sig, struct tty_struct *tty) { struct n_tty_data *ldata = tty->disc_data; - if (L_NOFLSH(tty)) { + if (L_NOFLSH(tty) || (!SIG_FLUSHING(sig))) { /* signal only */ __isig(sig, tty); @@ -1244,7 +1248,8 @@ n_tty_receive_signal_char(struct tty_struct *tty, int signal, unsigned char c) if (I_IXON(tty)) start_tty(tty); if (L_ECHO(tty)) { - echo_char(c, tty); + if (c != STATUS_CHAR(tty)) + echo_char(c, tty); commit_echoes(tty); } else process_echoes(tty); @@ -1294,6 +1299,9 @@ n_tty_receive_char_special(struct tty_struct *tty, unsigned char c) } else if (c == SUSP_CHAR(tty)) { n_tty_receive_signal_char(tty, SIGTSTP, c); return 0; + } else if (c == STATUS_CHAR(tty)) { + n_tty_receive_signal_char(tty, SIGINFO, c); + return 0; } } @@ -1848,6 +1856,9 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old) set_bit(INTR_CHAR(tty), ldata->char_map); set_bit(QUIT_CHAR(tty), ldata->char_map); set_bit(SUSP_CHAR(tty), ldata->char_map); + if (L_ICANON(tty) && L_IEXTEN(tty)) { + set_bit(STATUS_CHAR(tty), ldata->char_map); + } } clear_bit(__DISABLED_CHAR, ldata->char_map); ldata->raw = 0; diff --git a/include/linux/tty.h b/include/linux/tty.h index bd5fe0e90..8411fd18d 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -120,6 +120,7 @@ struct tty_bufhead { #define WERASE_CHAR(tty) ((tty)->termios.c_cc[VWERASE]) #define LNEXT_CHAR(tty) ((tty)->termios.c_cc[VLNEXT]) #define EOL2_CHAR(tty) ((tty)->termios.c_cc[VEOL2]) +#define STATUS_CHAR(tty) ((tty)->termios.c_cc[VSTATUS]) #define _I_FLAG(tty, f) ((tty)->termios.c_iflag & (f)) #define _O_FLAG(tty, f) ((tty)->termios.c_oflag & (f)) -- 2.26.2