Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4707769pxj; Wed, 12 May 2021 11:21:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzQbBKQ3CQkvqTBYttcPYZCNxVp+5Nabg3MguMzB5LieEZzqupRXDUWbmizrP1e873LoWnR X-Received: by 2002:aca:385:: with SMTP id 127mr8403836oid.143.1620843694486; Wed, 12 May 2021 11:21:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620843694; cv=none; d=google.com; s=arc-20160816; b=tRWMz1ea3cfwyZy/OkxToE1L7yHO6x7AT8Aqf0Jc6PEnCpq8v8mVstulJ+GfSVGwtT 04DW3HBpI2F1M2CoogkW+F34XJXtaKNtaIzhvaMTAHwbWAI41TLK9Gs0lb03W6d2W6Qz 9oOjTayjoBAfx4GUyTvI63UuCdnwJ3wBEtiTeoCBzFF/0liivXlwNd/gOrkF5wg9NoGJ pheli+wgkzQOQFZyCR9661ZsaZdLntu4Jx51i+/1/binArlbKpUO3ymnJfO06gpXLMkx haX1ehF+DMZOvCvhqmV8HMq8noxqOlLz4fshdpz1BD+WXUc8TxXL9BGRoXiY5XTYiI1F LSAA== 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=Mgf+yJ/BXgZb0J9c294WW9H7BIN57MJS5uRdP3PNWPc=; b=OhaMW1HrNST1ndrZq+VnJPPen29QPB46uVftStOKmzzxgsVCtiKiGzxtlp47PmRX4y 6HOIcds8q14U7lJ0YQsEggzLmG7diVK23Mvg3ws0uuaDobcoXzxUy1QKAlBKQn54yeQ/ AB3QouqLwjFnl0hRKKRwV247xirTkNqvh5neRVpbi4c0R+aCrF/72hcr7klyO8oWchhX +3YvZYW396wLUvvSYNIoUWdwqCgQwNyingkCIy8mgz2TsC/s0DS+YeRabCr2gvUOlDeV /a7twdYPInylL7f2JMtVlVUP/keu5GI1A2mep7mPRiU5QEwnyj8OedyfQ9AwxoX88IZ4 E6xQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=k11XPgXm; 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=pass (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 c9si723369ots.59.2021.05.12.11.21.20; Wed, 12 May 2021 11:21:34 -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=@linuxfoundation.org header.s=korg header.b=k11XPgXm; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354836AbhELSSw (ORCPT + 99 others); Wed, 12 May 2021 14:18:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:43414 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236054AbhELQ22 (ORCPT ); Wed, 12 May 2021 12:28:28 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0488C6144C; Wed, 12 May 2021 15:56:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620834989; bh=Pc4er4GLGZODYxHzfAjjwOUOVRiJEL91I87HcMKsQQk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k11XPgXmrIT2xTSZuUmQV5zbG5P8CrDdZXwt8SmoZNUJJG4CmjgkWSm+zWqXBPixv Ft0WklO8ReO+q2HvwfvYDnGrkga1GJQKkxI7Ro06r5ZwHnvpHU4OjsVpSTBHR/JTSY LUjgwiSFlJrBvGvh1dHg+OLB/KdcuOTj4xd+foL0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Erwan Le Ray , Sasha Levin Subject: [PATCH 5.12 165/677] serial: stm32: fix a deadlock in set_termios Date: Wed, 12 May 2021 16:43:31 +0200 Message-Id: <20210512144842.726279203@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144837.204217980@linuxfoundation.org> References: <20210512144837.204217980@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: Erwan Le Ray [ Upstream commit 436c97936001776f16153771ee887f125443e974 ] CTS/RTS GPIOs support that has been added recently to STM32 UART driver has introduced scheduled code in a set_termios part protected by a spin lock. This generates a potential deadlock scenario: Chain exists of: &irq_desc_lock_class --> console_owner --> &port_lock_key Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&port_lock_key); lock(console_owner); lock(&port_lock_key); lock(&irq_desc_lock_class); *** DEADLOCK *** 4 locks held by stty/766: Move the scheduled code after the spinlock. Fixes: 6cf61b9bd7cc ("tty: serial: Add modem control gpio support for STM32 UART") Signed-off-by: Erwan Le Ray Link: https://lore.kernel.org/r/20210304162308.8984-8-erwan.leray@foss.st.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/tty/serial/stm32-usart.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c index 326f300dd410..a381ee52168a 100644 --- a/drivers/tty/serial/stm32-usart.c +++ b/drivers/tty/serial/stm32-usart.c @@ -829,12 +829,6 @@ static void stm32_usart_set_termios(struct uart_port *port, cr3 |= USART_CR3_CTSE | USART_CR3_RTSE; } - /* Handle modem control interrupts */ - if (UART_ENABLE_MS(port, termios->c_cflag)) - stm32_usart_enable_ms(port); - else - stm32_usart_disable_ms(port); - usartdiv = DIV_ROUND_CLOSEST(port->uartclk, baud); /* @@ -916,6 +910,12 @@ static void stm32_usart_set_termios(struct uart_port *port, stm32_usart_set_bits(port, ofs->cr1, BIT(cfg->uart_enable_bit)); spin_unlock_irqrestore(&port->lock, flags); + + /* Handle modem control interrupts */ + if (UART_ENABLE_MS(port, termios->c_cflag)) + stm32_usart_enable_ms(port); + else + stm32_usart_disable_ms(port); } static const char *stm32_usart_type(struct uart_port *port) -- 2.30.2