Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1083326pxk; Fri, 25 Sep 2020 05:57:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwb+PmpBW5ki//EN57+zFAxhFpKESQTAeyRXfu9TNnJxVTONrU5jtJJUoOXb0xtWf/QOBRZ X-Received: by 2002:a17:906:1691:: with SMTP id s17mr2665412ejd.458.1601038641390; Fri, 25 Sep 2020 05:57:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601038641; cv=none; d=google.com; s=arc-20160816; b=iDEQslcpYhJ256D+NX/LLS3fGD59J5vywGh3bOFzRhxPLDBujM69vWTKlQFCQbB3vO kiiQm1No5o/sFtFnOJJXF78JZGO2FOgLfGpbe11OV8kKMKyM2+I/VgcLDt0e5Nwr9iub LxD+J0rt9ADKfAJGJFpgH0DoWlHCEJoP3GNwucDO73DVPP9qT6vT4nLeAl3cqp9BqFnj FEoYiNQoglMINyuvZuikL85VQkVJ/2OBDbO1uPWRNLbP9TQ7YQvCiA/793sFOiA/O98g nOGF3bpze2AAc4xYTj+IZf5mYk2Tm3Qbq7ymkUntVG4baOHXVbHdd4vp72qAkJpFPPcb jnlg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=aTxSH7isIFP4E4a0HiTtcO6DXDQSU+z6uJZ3f0Ns6uc=; b=ZelrVjPl92k2FxsxXSP0o9Zcg6xqiTtNycJ8duf14eDVQv2116KWQHjjHfRaZHO1Ef HDxyaekmgMQ74hT8ES+ovCq8i+3OIvlB+OXJmV0mZ8cbzwVrEeqaux/rubWB8dVqRg4b /VbaT6vKyLjDez7c0gkHdYkvgeY7k5uF/2jS4a3h0yozDzGDAaGb3KyiTHhJkkyOzDj2 0z4wATXUTGJOcsgoccY222jI54D+BIVNWVWwZBjPHvJGWfwffkk9D/piTK+/rjZgsF3V LmHd98gNLx+6ACDFXy+h3DKZP+fevVL8M+HhiL47PZIu7+LWRSzyudJ3FZc2L3Z8PlMH gKFg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WSCIf+eR; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bu5si1743559ejb.750.2020.09.25.05.56.57; Fri, 25 Sep 2020 05:57:21 -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=pass header.i=@kernel.org header.s=default header.b=WSCIf+eR; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729637AbgIYMzB (ORCPT + 99 others); Fri, 25 Sep 2020 08:55:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:34080 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729626AbgIYMy4 (ORCPT ); Fri, 25 Sep 2020 08:54:56 -0400 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8DA512072E; Fri, 25 Sep 2020 12:54:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1601038495; bh=iRu3yCLNJDXWXtoJHpaEMc6NIO/CG9RyVPDyojcc+t0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WSCIf+eRopEfHHzkkgQaU4vPIwyF1LUcU/EY9B65pyVHpeU4Tg5Gft/1pGhlp+42t DdAfh7hHXYcAdimUzMkpfhpyn72T5GmbSd+E5p9NtkFeByBSw8jdToTm7ZFqOmTNUr t11lpxVtDzbF1XDG0G/WdhaIk8VDdHIvRYrrSDjA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lukas Wunner , Andy Shevchenko , "Nobuhiro Iwamatsu (CIP)" Subject: [PATCH 4.19 37/37] serial: 8250: Avoid error message on reprobe Date: Fri, 25 Sep 2020 14:49:05 +0200 Message-Id: <20200925124726.516568058@linuxfoundation.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200925124720.972208530@linuxfoundation.org> References: <20200925124720.972208530@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Lukas Wunner commit e0a851fe6b9b619527bd928aa93caaddd003f70c upstream. If the call to uart_add_one_port() in serial8250_register_8250_port() fails, a half-initialized entry in the serial_8250ports[] array is left behind. A subsequent reprobe of the same serial port causes that entry to be reused. Because uart->port.dev is set, uart_remove_one_port() is called for the half-initialized entry and bails out with an error message: bcm2835-aux-uart 3f215040.serial: Removing wrong port: (null) != (ptrval) The same happens on failure of mctrl_gpio_init() since commit 4a96895f74c9 ("tty/serial/8250: use mctrl_gpio helpers"). Fix by zeroing the uart->port.dev pointer in the probe error path. The bug was introduced in v2.6.10 by historical commit befff6f5bf5f ("[SERIAL] Add new port registration/unregistration functions."): https://git.kernel.org/tglx/history/c/befff6f5bf5f The commit added an unconditional call to uart_remove_one_port() in serial8250_register_port(). In v3.7, commit 835d844d1a28 ("8250_pnp: do pnp probe before legacy probe") made that call conditional on uart->port.dev which allows me to fix the issue by zeroing that pointer in the error path. Thus, the present commit will fix the problem as far back as v3.7 whereas still older versions need to also cherry-pick 835d844d1a28. Fixes: 835d844d1a28 ("8250_pnp: do pnp probe before legacy probe") Signed-off-by: Lukas Wunner Cc: stable@vger.kernel.org # v2.6.10 Cc: stable@vger.kernel.org # v2.6.10: 835d844d1a28: 8250_pnp: do pnp probe before legacy Reviewed-by: Andy Shevchenko Link: https://lore.kernel.org/r/b4a072013ee1a1d13ee06b4325afb19bda57ca1b.1589285873.git.lukas@wunner.de [iwamatsu: Backported to 4.14, 4.19: adjust context] Signed-off-by: Nobuhiro Iwamatsu (CIP) Signed-off-by: Greg Kroah-Hartman --- drivers/tty/serial/8250/8250_core.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -1062,8 +1062,10 @@ int serial8250_register_8250_port(struct serial8250_apply_quirks(uart); ret = uart_add_one_port(&serial8250_reg, &uart->port); - if (ret == 0) - ret = uart->port.line; + if (ret) + goto err; + + ret = uart->port.line; } else { dev_info(uart->port.dev, "skipping CIR port at 0x%lx / 0x%llx, IRQ %d\n", @@ -1088,6 +1090,11 @@ int serial8250_register_8250_port(struct mutex_unlock(&serial_mutex); return ret; + +err: + uart->port.dev = NULL; + mutex_unlock(&serial_mutex); + return ret; } EXPORT_SYMBOL(serial8250_register_8250_port);