From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: USB: serial: console: fix reported terminal settings From: Johan Hovold Message-Id: <20181204160036.24625-1-johan@kernel.org> Date: Tue, 4 Dec 2018 17:00:36 +0100 To: linux-usb@vger.kernel.org Cc: Jarkko Nikula , Greg Kroah-Hartman , Jiri Slaby , linux-kernel@vger.kernel.org, Johan Hovold , stable , Florian Zumbiehl List-ID: VGhlIFVTQi1zZXJpYWwgY29uc29sZSBpbXBsZW1lbnRhdGlvbiBoYXMgbmV2ZXIgcmVwb3J0ZWQg dGhlIGFjdHVhbAp0ZXJtaW5hbCBzZXR0aW5ncyB1c2VkLiBEZXNwaXRlIHN0b3JpbmcgdGhlIGNv cnJlc3BvbmRpbmcgY2ZsYWdzIGluIGl0cwpzdHJ1Y3QgY29uc29sZSwgdGhpcyB3YXMgbmV2ZXIg aG9ub3VyZWQgb24gbGF0ZXIgdHR5IG9wZW4oKSB3aGVyZSB0aGUKdHR5IHRlcm1pb3Mgd291bGQg YmUgbGVmdCBpbml0aWFsaXNlZCB0byB0aGUgZHJpdmVyIGRlZmF1bHRzLgoKVW5saWtlIHRoZSBz ZXJpYWwgY29uc29sZSBpbXBsZW1lbnRhdGlvbiwgdGhlIFVTQi1zZXJpYWwgY29kZSBjYWxscwpz dWJkcml2ZXIgb3BlbigpIGFscmVhZHkgYXQgY29uc29sZSBzZXR1cC4gV2hpbGUgY2FsbGluZyBz ZXRfdGVybWlvcygpCmJlZm9yZSBvcGVuKCkgbG9va3MgbGlrZSBpdCBjb3VsZCB3b3JrIGZvciBz b21lIFVTQi1zZXJpYWwgZHJpdmVycywKb3RoZXJzIGRlZmluaXRlbHkgZG8gbm90IGV4cGVjdCB0 aGlzLCBzbyBtb2RlbGxpbmcgdGhpcyBhZnRlciBzZXJpYWwKY29yZSBpcyBnb2luZyB0byBiZSBp bnRydXNpdmUsIGlmIGF0IGFsbCBwb3NzaWJsZS4KCkluc3RlYWQsIHVzZSBhIChyZW5hbWVkKSB0 dHkgaGVscGVyIHRvIHNhdmUgdGhlIHRlcm1pb3MgZGF0YSB1c2VkIGF0CmNvbnNvbGUgc2V0dXAs IHNvIHRoYXQgdGhlIHR0eSB0ZXJtaW9zIHJlZmxlY3RzIHRoZSBhY3R1YWwgdGVybWluYWwKc2V0 dGluZ3MgYWZ0ZXIgYSBzdWJzZXF1ZW50IHR0eSBvcGVuKCkuCgpOb3RlIHRoYXQgdGhlIGNhbGxz IHRvIHR0eV9pbml0X3Rlcm1pb3MoKSAodHR5X2RyaXZlcl9pbnN0YWxsKCkpIGFuZAp0dHlfc2F2 ZV90ZXJtaW9zKCkgYXJlIHNlcmlhbGlzZWQgdXNpbmcgdGhlIGRpc2Nvbm5lY3QgbXV0ZXguCgpU aGlzIHNwZWNpZmljYWxseSBmaXhlcyBhIHJlZ3Jlc3Npb24gdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5 IGEgcmVjZW50CmNoYW5nZSBhZGRpbmcgc29mdHdhcmUgZmxvdyBjb250cm9sIHRvIHRoZSBwbDIz MDMgZHJpdmVyOiBhIGdldHR5IHRyeWluZwp0byBkaXNhYmxlIGZsb3cgY29udHJvbCB3aGlsZSBs ZWF2aW5nIHRoZSBiYXVkIHJhdGUgdW5jaGFuZ2VkIHdvdWxkIG5vdwphbHNvIHNldCB0aGUgYmF1 ZCByYXRlIHRvIHRoZSBkcml2ZXIgZGVmYXVsdCAocHJpb3IgdG8gdGhlIGZsb3ctY29udHJvbApj aGFuZ2UgdGhpcyBoYWQgYmVlbiBhIG5vb3ApLgoKRml4ZXM6IDcwNDFkOWMzZjAxYiAoIlVTQjog c2VyaWFsOiBwbDIzMDM6IGFkZCBzdXBwb3J0IGZvciB0eCB4b24veG9mZiBmbG93IGNvbnRyb2wi KQpDYzogc3RhYmxlIDxzdGFibGVAdmdlci5rZXJuZWwub3JnPgkjIDQuMTgKUmVwb3J0ZWQtYnk6 IEphcmtrbyBOaWt1bGEgPGphcmtrby5uaWt1bGFAbGludXguaW50ZWwuY29tPgpDYzogRmxvcmlh biBadW1iaWVobCA8ZmxvcnpAZmxvcnouZGU+ClNpZ25lZC1vZmYtYnk6IEpvaGFuIEhvdm9sZCA8 am9oYW5Aa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJzL3R0eS90dHlfaW8uYyAgICAgICAgIHwgMTEg KysrKysrKysrLS0KIGRyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgfCAgMiArLQogaW5jbHVk ZS9saW51eC90dHkuaCAgICAgICAgICB8ICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0 aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW8u YyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCmluZGV4IGVlODBkZmJkNTQ0Mi4uNjg3MjUwZWM4MDMy IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uYworKysgYi9kcml2ZXJzL3R0eS90dHlf aW8uYwpAQCAtMTM3Myw3ICsxMzczLDEzIEBAIHN0cnVjdCB0dHlfc3RydWN0ICp0dHlfaW5pdF9k ZXYoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgaW50IGlkeCkKIAlyZXR1cm4gRVJSX1BUUihy ZXR2YWwpOwogfQogCi1zdGF0aWMgdm9pZCB0dHlfZnJlZV90ZXJtaW9zKHN0cnVjdCB0dHlfc3Ry dWN0ICp0dHkpCisvKioKKyAqIHR0eV9zYXZlX3Rlcm1pb3MoKSAtIHNhdmUgdHR5IHRlcm1pb3Mg ZGF0YSBpbiBkcml2ZXIgdGFibGUKKyAqIEB0dHk6IHR0eSB3aG9zZSB0ZXJtaW9zIGRhdGEgdG8g c2F2ZQorICoKKyAqIExvY2tpbmc6IENhbGxlciBndWFyYW50ZWVzIHNlcmlhbGlzYXRpb24gd2l0 aCB0dHlfaW5pdF90ZXJtaW9zKCkuCisgKi8KK3ZvaWQgdHR5X3NhdmVfdGVybWlvcyhzdHJ1Y3Qg dHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBrdGVybWlvcyAqdHA7CiAJaW50IGlkeCA9IHR0 eS0+aW5kZXg7CkBAIC0xMzkyLDYgKzEzOTgsNyBAQCBzdGF0aWMgdm9pZCB0dHlfZnJlZV90ZXJt aW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiAJfQogCSp0cCA9IHR0eS0+dGVybWlvczsKIH0K K0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9zYXZlX3Rlcm1pb3MpOwogCiAvKioKICAqCXR0eV9mbHVz aF93b3JrcwkJLQlmbHVzaCBhbGwgd29ya3Mgb2YgYSB0dHkvcHR5IHBhaXIKQEAgLTE0OTEsNyAr MTQ5OCw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHks IGludCBpZHgpCiAJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZ0dHlfbXV0ZXgpKTsKIAlpZiAo dHR5LT5vcHMtPnNodXRkb3duKQogCQl0dHktPm9wcy0+c2h1dGRvd24odHR5KTsKLQl0dHlfZnJl ZV90ZXJtaW9zKHR0eSk7CisJdHR5X3NhdmVfdGVybWlvcyh0dHkpOwogCXR0eV9kcml2ZXJfcmVt b3ZlX3R0eSh0dHktPmRyaXZlciwgdHR5KTsKIAl0dHktPnBvcnQtPml0dHkgPSBOVUxMOwogCWlm ICh0dHktPmxpbmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jIGIv ZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwppbmRleCAxNzk0MDU4OWM2NDcuLjdkMjg5MzAy ZmY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYworKysgYi9kcml2 ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCkBAIC0xMDEsNyArMTAxLDYgQEAgc3RhdGljIGludCB1 c2JfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCiAJCWNm bGFnIHw9IFBBUkVOQjsKIAkJYnJlYWs7CiAJfQotCWNvLT5jZmxhZyA9IGNmbGFnOwogCiAJLyoK IAkgKiBubyBuZWVkIHRvIGNoZWNrIHRoZSBpbmRleCBoZXJlOiBpZiB0aGUgaW5kZXggaXMgd3Jv bmcsIGNvbnNvbGUKQEAgLTE2NCw2ICsxNjMsNyBAQCBzdGF0aWMgaW50IHVzYl9jb25zb2xlX3Nl dHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKIAkJCXNlcmlhbC0+dHlwZS0+ c2V0X3Rlcm1pb3ModHR5LCBwb3J0LCAmZHVtbXkpOwogCiAJCQl0dHlfcG9ydF90dHlfc2V0KCZw b3J0LT5wb3J0LCBOVUxMKTsKKwkJCXR0eV9zYXZlX3Rlcm1pb3ModHR5KTsKIAkJCXR0eV9rcmVm X3B1dCh0dHkpOwogCQl9CiAJCXR0eV9wb3J0X3NldF9pbml0aWFsaXplZCgmcG9ydC0+cG9ydCwg MSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHku aAppbmRleCA0MTRkYjJiY2U3MTUuLjM5MjEzOGZlNTliNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9s aW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC01NTYsNiArNTU2LDcgQEAg ZXh0ZXJuIHN0cnVjdCB0dHlfc3RydWN0ICp0dHlfaW5pdF9kZXYoc3RydWN0IHR0eV9kcml2ZXIg KmRyaXZlciwgaW50IGlkeCk7CiBleHRlcm4gdm9pZCB0dHlfcmVsZWFzZV9zdHJ1Y3Qoc3RydWN0 IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGlkeCk7CiBleHRlcm4gaW50IHR0eV9yZWxlYXNlKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIGV4dGVybiB2b2lkIHR0eV9pbml0 X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gdm9pZCB0dHlfc2F2ZV90 ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIGludCB0dHlfc3RhbmRhcmRf aW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLAogCQlzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5KTsKIAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74E20C04EB8 for ; Tue, 4 Dec 2018 16:01:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2F5772081C for ; Tue, 4 Dec 2018 16:01:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tYpoiwit" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F5772081C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726807AbeLDQBO (ORCPT ); Tue, 4 Dec 2018 11:01:14 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:42130 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726367AbeLDQBO (ORCPT ); Tue, 4 Dec 2018 11:01:14 -0500 Received: by mail-lf1-f68.google.com with SMTP id l10so12321627lfh.9; Tue, 04 Dec 2018 08:01:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4AfIsjpkJHb43W/ZaV+KazQjDgZpHguTHKABJHXmS4k=; b=tYpoiwitTOKccZVDzZLWbWjAwiHqWx0SlN2hEzsHRgx6BXi08Pfiz0Kp1ahO7+ZVyR jeLLVJdM5qK3gQjiMihY6b5VOIa403OyPhi05UkouSjqdK8qFxmB+pYW58JQNnQPVoXd rANO5r8ELK4Yn22RHuje0u5WZViqJLMUJqxX0EVYJXL6RXpKQgZpofigTUbceRHjaNfI +q5kox9N//RkyxnJ+lo3Ez+4iTi5EWjdhtcISnJ6GLy7p2mFAcOgdNcr5fPBQZ28rOBG 8ljuyjSpSGFH7E+SY93prvKs2W5K9Gt9aLPl2v8SODQ3RrjyI3Z6+oVHkkLTxTSvMUIF 9pDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=4AfIsjpkJHb43W/ZaV+KazQjDgZpHguTHKABJHXmS4k=; b=VCff88zPNo8+vjT/3Phi4GOV50WaPHL3qN1k/sOgehn4bHJPaa63ei0YGd19zu+aDY cwiFH0uVzPqnLgP4P/SUx+gbzBQXZJCUkuTfrPXOs9k9/PKHRJwMe5T4Sw6YCn28pd4V gNG5NbdGI0fXVppR2tnHzdWAN9LRkWAPk5doIEccXSfb0ieFSmC9vGHiuiUhI2+sqmAi JiN6lmBUDZ869RnuE9OWLtKJLT23DVVMFssYYZoZmCH3T85l7LLk4T/0D9bE64+s9Yyr ixWEcR7uThL+lzDYpVeeB0PidzJqttzepvizb+3H72gadNh6DzRGpYZaAc9QmqRL3I2O 9FbA== X-Gm-Message-State: AA+aEWa94PftarmXDa/6gxd3RKPZ/sxiRRsEmfnsu+OIs0M2Fl6SGNdo WRgDz/m9671Vb5xwEjJm8eJQWEMW X-Google-Smtp-Source: AFSGD/WuCs2XhGLOhkkif9QXxWD2kLyTmpvXrxmRd3GctHYLZXx9YEptiQUunRXK3bkyMdExfxLgOQ== X-Received: by 2002:a19:1901:: with SMTP id 1mr10661394lfz.99.1543939270148; Tue, 04 Dec 2018 08:01:10 -0800 (PST) Received: from xi.terra (c-74bee655.07-184-6d6c6d4.bbcust.telenor.se. [85.230.190.116]) by smtp.gmail.com with ESMTPSA id o17sm2994042lff.77.2018.12.04.08.01.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Dec 2018 08:01:09 -0800 (PST) Received: from johan by xi.terra with local (Exim 4.91) (envelope-from ) id 1gUD8I-0006Pw-QE; Tue, 04 Dec 2018 17:01:10 +0100 From: Johan Hovold To: linux-usb@vger.kernel.org Cc: Jarkko Nikula , Greg Kroah-Hartman , Jiri Slaby , linux-kernel@vger.kernel.org, Johan Hovold , stable , Florian Zumbiehl Subject: [PATCH] USB: serial: console: fix reported terminal settings Date: Tue, 4 Dec 2018 17:00:36 +0100 Message-Id: <20181204160036.24625-1-johan@kernel.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204155904.GC18087@localhost> References: <20181204155904.GC18087@localhost> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The USB-serial console implementation has never reported the actual terminal settings used. Despite storing the corresponding cflags in its struct console, this was never honoured on later tty open() where the tty termios would be left initialised to the driver defaults. Unlike the serial console implementation, the USB-serial code calls subdriver open() already at console setup. While calling set_termios() before open() looks like it could work for some USB-serial drivers, others definitely do not expect this, so modelling this after serial core is going to be intrusive, if at all possible. Instead, use a (renamed) tty helper to save the termios data used at console setup, so that the tty termios reflects the actual terminal settings after a subsequent tty open(). Note that the calls to tty_init_termios() (tty_driver_install()) and tty_save_termios() are serialised using the disconnect mutex. This specifically fixes a regression that was triggered by a recent change adding software flow control to the pl2303 driver: a getty trying to disable flow control while leaving the baud rate unchanged would now also set the baud rate to the driver default (prior to the flow-control change this had been a noop). Fixes: 7041d9c3f01b ("USB: serial: pl2303: add support for tx xon/xoff flow control") Cc: stable # 4.18 Reported-by: Jarkko Nikula Cc: Florian Zumbiehl Signed-off-by: Johan Hovold --- drivers/tty/tty_io.c | 11 +++++++++-- drivers/usb/serial/console.c | 2 +- include/linux/tty.h | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index ee80dfbd5442..687250ec8032 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -1373,7 +1373,13 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) return ERR_PTR(retval); } -static void tty_free_termios(struct tty_struct *tty) +/** + * tty_save_termios() - save tty termios data in driver table + * @tty: tty whose termios data to save + * + * Locking: Caller guarantees serialisation with tty_init_termios(). + */ +void tty_save_termios(struct tty_struct *tty) { struct ktermios *tp; int idx = tty->index; @@ -1392,6 +1398,7 @@ static void tty_free_termios(struct tty_struct *tty) } *tp = tty->termios; } +EXPORT_SYMBOL_GPL(tty_save_termios); /** * tty_flush_works - flush all works of a tty/pty pair @@ -1491,7 +1498,7 @@ static void release_tty(struct tty_struct *tty, int idx) WARN_ON(!mutex_is_locked(&tty_mutex)); if (tty->ops->shutdown) tty->ops->shutdown(tty); - tty_free_termios(tty); + tty_save_termios(tty); tty_driver_remove_tty(tty->driver, tty); tty->port->itty = NULL; if (tty->link) diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c index 17940589c647..7d289302ff6c 100644 --- a/drivers/usb/serial/console.c +++ b/drivers/usb/serial/console.c @@ -101,7 +101,6 @@ static int usb_console_setup(struct console *co, char *options) cflag |= PARENB; break; } - co->cflag = cflag; /* * no need to check the index here: if the index is wrong, console @@ -164,6 +163,7 @@ static int usb_console_setup(struct console *co, char *options) serial->type->set_termios(tty, port, &dummy); tty_port_tty_set(&port->port, NULL); + tty_save_termios(tty); tty_kref_put(tty); } tty_port_set_initialized(&port->port, 1); diff --git a/include/linux/tty.h b/include/linux/tty.h index 414db2bce715..392138fe59b6 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -556,6 +556,7 @@ extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx); extern void tty_release_struct(struct tty_struct *tty, int idx); extern int tty_release(struct inode *inode, struct file *filp); extern void tty_init_termios(struct tty_struct *tty); +extern void tty_save_termios(struct tty_struct *tty); extern int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty); -- 2.19.2