From patchwork Wed Aug 2 11:11:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 109209 Delivered-To: patch@linaro.org Received: by 10.140.101.6 with SMTP id t6csp2645363qge; Wed, 2 Aug 2017 04:12:29 -0700 (PDT) X-Received: by 10.98.205.8 with SMTP id o8mr18899377pfg.241.1501672349111; Wed, 02 Aug 2017 04:12:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501672349; cv=none; d=google.com; s=arc-20160816; b=xNMRRT0oj2PMuAzXHLI/RN7+fBFwlWtLIlwXjnxxWkGZbU7eociQkcS3Dc10aLguEs h9PlEnEEpAnm6dfSa9PYkM2kB7hBWPmZjip34iq6HUvx8B43kHs8ph8jT0t8byXloQ93 29bQTjxJMsH7X3Yd9jfH5CrCSr4s6L2UMPSciL4Xa8yvuiUzT1dvkPz6r9L5lZaDEdtZ dYznkvA/c86lV9y3WJLSWKLRfX3nCeLuOY/nyC6e8m1g8fXsT6UARB4CzhoIh7+0P3gP /BWdslL6B8NJMjyIASoMOCtA3OjS5QEEGv39CcvBKuOUlql+GAy7mVXaabcUm5GXJKBq W7dQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=pG4Hkfc0Na+V/sTpIJn2lZyTbzyeh6du1CJBFBKXoaw=; b=OgniBw2uGNNdUqgAlZ+CflcEquoGrg2UqVRl08tf4XMD1ICqgk176IqoayH+3K1jwL CQ+moDA0UAkApuTz3jCP3Cc3agXM+r+0cYuYVNdbndxA/PvyV/rQi6dLSjt0DXeivPj/ kdfFOyde/LwIjhJHT6/pAWVMcs4mASddRqW8kRcSFHoaZnguE30XwmQ6bGufzhObmmrY b825IuRenmX99d4jaflMyTv9Ap3722L3u7tJ1pqQLXx7jjE7QEAe0hHNhUpZmSyBBDSJ CoDQV1F7/VatgIs3AgdjUp6160qNb+4c/818w5rzweuLJPSpc8XJAJXCL8F/4aXfu/wL qeiw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y67si19445408pfy.484.2017.08.02.04.12.28; Wed, 02 Aug 2017 04:12:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753014AbdHBLMZ (ORCPT + 25 others); Wed, 2 Aug 2017 07:12:25 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:49169 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752171AbdHBLMY (ORCPT ); Wed, 2 Aug 2017 07:12:24 -0400 Received: from wuerfel.lan ([78.43.238.10]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.129]) with ESMTPA (Nemesis) id 0MDCnY-1dtK7S3QC4-00GX9A; Wed, 02 Aug 2017 13:12:11 +0200 From: Arnd Bergmann To: Greg Kroah-Hartman , Jiri Slaby Cc: Sergey Senozhatsky , Arnd Bergmann , Rob Herring , Andy Shevchenko , linux-kernel@vger.kernel.org Subject: [PATCH, urgent, tty-next] tty: fix __tty_insert_flip_char regression Date: Wed, 2 Aug 2017 13:11:39 +0200 Message-Id: <20170802111151.1818472-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:arxeGMfOLmzWLbuICots1ZeIXJy43rWMOO91PLM/QkYOF4GoYlE zGhkk+U5++U1hdU2aXH5V3quFxRumTCVlu4QFigUjCEHfiyxCIrNjlwJsiEzaxOEew0d0ot zmFR2NsiY5xCvg2eMogMn3gJICan/CTHIQ1MTyv7xcLwQOHPPzilR3IIh7tA1ZUpMi7zmfx ekuBRK5wFQXKDL3qk3shA== X-UI-Out-Filterresults: notjunk:1; V01:K0:oyPow8RepOI=:lTlOqfNwnu34ycyRaWrNfe 9x50I0UZewGCX91TU0jxTSvcxQ7lWSZwpEz96Q0tHm871EYLfEfUcNQNxRMhYYkTOG9MBH7Uq CDtYUDFnGB9FwWF+t44ABTecqs0OEzDWuE/58lEXdvqOxON6yEVOmQGO0zEJdBXbDud/E/HJ5 V7dIa0PmaIdcYbwm9A/YCHr8F/RKtLyJeLgYhvyweNm55d30JZxSqygWD/wptffF2T1afq9ep hXQFnN5MMINmlA18pMisBdkpOmOzo/Uwo46W1vvciRS2dipKaS/ftgSjKQxA6BJbH5+W3cCx6 j0HuOhH+zvrs9GQWWZCxHHFpjrgvnDJ1EdvJEMcfPCVD1ettMT9sbBxl/DtjJuCVQdbEA2CJu aYmfbmsJKOlSTDcboaAcYcdw8La1Ggon9t6MQC+VMw8kDHQfDVThzqti1rtKs2LV5Ctd0I46a I5lYGpJ6e+W7TPMclBWiDiGqs3eJw2q7AMPYSn/j2xENcEEJO/KusExjGorSa/itvszJe/W7x 5/ae/jiZbl5pPR0SugVVXIMlFEbeaVbhSiO7gFQH21VcZghPLcluR0fZNbVA1MWH1uFPEMGRI MAF5762Xnf5QTn9JRctqUXL19Kc34dYegETn6mLp3irbcJFL34cldQs7JGBm/MxWe8RP8jLMu jAAnOUOoZgO2B3LmILwu8+vJDBhuKjV9PA6siylST9rQ48ZynjPufbOPbDCPisnTx8ttGycsD 0XIWfn3hwHz8YGTroa70vIePulo3SYJkU959sw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sergey noticed a small but fatal mistake in __tty_insert_flip_char, leading to an oops in an interrupt handler when using any serial port. The problem is that I accidentally took the tty_buffer pointer before calling __tty_buffer_request_room(), which replaces the buffer. This moves the pointer lookup to the right place after allocating the new buffer space. Fixes: 979990c62848 ("tty: improve tty_insert_flip_char() fast path") Reported-by: Sergey Senozhatsky Tested-by: Sergey Senozhatsky Signed-off-by: Arnd Bergmann --- drivers/tty/tty_buffer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -- 2.9.0 diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c index 6a8563633d4b..f8eba1c5412f 100644 --- a/drivers/tty/tty_buffer.c +++ b/drivers/tty/tty_buffer.c @@ -372,12 +372,13 @@ EXPORT_SYMBOL(tty_insert_flip_string_flags); */ int __tty_insert_flip_char(struct tty_port *port, unsigned char ch, char flag) { - struct tty_buffer *tb = port->buf.tail; + struct tty_buffer *tb; int flags = (flag == TTY_NORMAL) ? TTYB_NORMAL : 0; if (!__tty_buffer_request_room(port, 1, flags)) return 0; + tb = port->buf.tail; if (~tb->flags & TTYB_NORMAL) *flag_buf_ptr(tb, tb->used) = flag; *char_buf_ptr(tb, tb->used++) = ch;