Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp1839408pxb; Thu, 16 Sep 2021 17:29:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz7qygGm9W6Gu/J6jwlIjmk2QaltRdRU+qtBJ0I/IC2PL0lb8nrIue5sHfCIXoXIspR2/zD X-Received: by 2002:a6b:ef10:: with SMTP id k16mr2668563ioh.210.1631838564383; Thu, 16 Sep 2021 17:29:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631838564; cv=none; d=google.com; s=arc-20160816; b=mIYopwzDgv5TDqGG9+qcI1jDqXNuuyHXmR0h1re/9uh5foKCO9JyUWuv9Wp1FB0fk/ nAq/pk/mgDXfs5Qg/3aOhxlHWM4iOsOl+CInUZhXl5W1Y/mctsSDW3poba006pKwFW9O SU9kNTJkWOWgegkKeoLlxjG/75DfWzimrggDwXX7paOL1yHoxGxNO0EFEV5RO5brZWef ert2KgZ7LgHm6eLE3VFN+5QU78f75gZq5120rvTALT+g+wQC7r+38Hr2GW9Ek7rHsAve yNydfRVym7O9Of9hoEMJbcj4sBQVcdQENWbwIlfLFD8CBs3My3NpzPYEsjO00NjQWOU5 btiA== 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=YAb6hxZi20SK8J44jwoiiwTYvkv2HvScZ97e5pUU9nw=; b=MS0ILODMJ9iKqafRoHcyd0QZHtazKcHEZLnul4sEvxNZjZ9N00s8xOR+4BA46ZmKbR yCeNgJTKHx0qpNINclxBKa77K1iWY7u5CpEf4kD1Uaop3vZ4Lxi//oKbVV8LU6dWpc4A 10gSVCwfew8kl5Lr8EgGozooKfT8MnMVZocvyCNR2Se72Kpmb7yCnrJHdJqwxpBuKccU u6O2j3kSr0YGOvLUZUNYc0c2riO1H7xBfscC17YjRnpciPZpjL8X7NwUbsdo+puNtgxk B2miKiXuFkrbJ89YNK8/okifyepFFzBV4TFCoDzRJpukD4nbcvfYIFNer1U3IVLeMHyk MKiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rqiK3myO; 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 z9si4395228ile.8.2021.09.16.17.29.12; Thu, 16 Sep 2021 17:29:24 -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=rqiK3myO; 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 S1348860AbhIPRDR (ORCPT + 99 others); Thu, 16 Sep 2021 13:03:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:55314 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345678AbhIPQ4M (ORCPT ); Thu, 16 Sep 2021 12:56:12 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 97A8561ABA; Thu, 16 Sep 2021 16:30:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631809843; bh=7g7VFpPQn5V3ZUik6UpjDE8iJY3WAIaFuDLTsNOoHTg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rqiK3myO7jOtHZ+/IYpG6fDddDXeGCbDSCfhM+nLOtAQ6AmIhgGO5cJCwWzwpBpor qeY1ZegtLS02mq+e7X8/s/XNtlGZWrkbws3l0w0SyclKNP9S0qQI8phy2VVy82OIcb 1L0pLgaL46QEeDhsaJFnNgkWKTkCAgHEqvRlSzmI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Pierre-Louis Bossart , Ranjani Sridharan , Bard Liao , Vinod Koul , Sasha Levin Subject: [PATCH 5.13 303/380] soundwire: intel: fix potential race condition during power down Date: Thu, 16 Sep 2021 18:01:00 +0200 Message-Id: <20210916155814.362850777@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210916155803.966362085@linuxfoundation.org> References: <20210916155803.966362085@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: Pierre-Louis Bossart [ Upstream commit ea6942dad4b2a7e1735aa0f10f3d0b04b847750f ] The power down sequence sets the link_up flag as false outside of the mutex_lock. This is potentially unsafe. In additional the flow in that sequence can be improved by first testing if the link was powered, setting the link_up flag as false and proceeding with the power down. In case the CPA bits cannot be cleared, we only flag an error since we cannot deal with interrupts any longer. Signed-off-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Signed-off-by: Bard Liao Link: https://lore.kernel.org/r/20210818024954.16873-2-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin --- drivers/soundwire/intel.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c index fd95f94630b1..c03d51ad40bf 100644 --- a/drivers/soundwire/intel.c +++ b/drivers/soundwire/intel.c @@ -537,12 +537,14 @@ static int intel_link_power_down(struct sdw_intel *sdw) mutex_lock(sdw->link_res->shim_lock); - intel_shim_master_ip_to_glue(sdw); - if (!(*shim_mask & BIT(link_id))) dev_err(sdw->cdns.dev, "%s: Unbalanced power-up/down calls\n", __func__); + sdw->cdns.link_up = false; + + intel_shim_master_ip_to_glue(sdw); + *shim_mask &= ~BIT(link_id); if (!*shim_mask) { @@ -559,18 +561,19 @@ static int intel_link_power_down(struct sdw_intel *sdw) link_control &= spa_mask; ret = intel_clear_bit(shim, SDW_SHIM_LCTL, link_control, cpa_mask); + if (ret < 0) { + dev_err(sdw->cdns.dev, "%s: could not power down link\n", __func__); + + /* + * we leave the sdw->cdns.link_up flag as false since we've disabled + * the link at this point and cannot handle interrupts any longer. + */ + } } mutex_unlock(sdw->link_res->shim_lock); - if (ret < 0) { - dev_err(sdw->cdns.dev, "%s: could not power down link\n", __func__); - - return ret; - } - - sdw->cdns.link_up = false; - return 0; + return ret; } static void intel_shim_sync_arm(struct sdw_intel *sdw) -- 2.30.2