Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp5614163img; Wed, 27 Mar 2019 11:44:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqyHL3FAKA0WkOoUt67XODXD219g9L0iiI1XILWewbta6h+o3QHUdiUHQ68QwalQyoBuEHe1 X-Received: by 2002:a63:6cc7:: with SMTP id h190mr3262773pgc.350.1553712265031; Wed, 27 Mar 2019 11:44:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553712265; cv=none; d=google.com; s=arc-20160816; b=DmRIJHyu92dDN6YpKPscq0qG/ZTEMiuxCQeZwwi7bWOIsxKHS/4JKCg93yXdIMPC64 ZhI5tpC3rIBMXsRWxvVLQ6oOwnykayhUY6sMbidF6ep5SnPxMPzJVvqjTS7os+7gzpR4 mHE2xlSkxvHobcf09PqEsMwrfpN7tDP8/A9VUJbQ/tj9CxMKO4WYFJKTgcvFZWk10+8Q ZmQhQL2/pPsVol6CZ5Nl9jLdrxN11O4FKaR0ODJ3OvFSUZ0ZVHyV0vZ3Gyy0N8zRL9/e gEfWfQxilAT+7hGO7lshu66Mg1cGXnfOLXTcdniqhy/Kw/WIcIq3Jp0PClYZ0SzZ542U E6GQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=nM30Dzv2bTohsp17WDY/4yrvh7NfEZ8yjAHNqzSNB+E=; b=O6CD4NiyUnHp5tLQHmDNiUqqGtakUluYpBm6xfOVypPhGxynp3K2B+CX2Ivje0vp0/ Ji+LgNxWesHxXtshBjdM6IebXVwVPxGtkp0vtVCt9gS/I9g3UV+f++1Do+sfs6ydunvx v6Qr5S5z7DUr7Wm7I6SLJFax3pIMh6ryWt9NE7VKwfR1k2vkJ/8ft4SJ1JREEmMVpQjs +8eHAVN6wi92WMnxaS3pVvi87eUDK2d2tF8BxI2dXpAa8A3KNZVqAzHeXcCASW7eJFWN aBmkgx1OXQHD1UAd9bwKjDvVZqd/2rT5+536l/eAwQxjElAWVryNY4jV4DuD5Zm3Srjn /iBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mRitRSQb; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z72si9378425pgd.401.2019.03.27.11.44.09; Wed, 27 Mar 2019 11:44:25 -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; dkim=pass header.i=@kernel.org header.s=default header.b=mRitRSQb; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391405AbfC0Sm3 (ORCPT + 99 others); Wed, 27 Mar 2019 14:42:29 -0400 Received: from mail.kernel.org ([198.145.29.99]:39906 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390922AbfC0SVz (ORCPT ); Wed, 27 Mar 2019 14:21:55 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 33B7A20643; Wed, 27 Mar 2019 18:21:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553710914; bh=90HuZ73liCvYfYLl4vTNC/+77oOepXv+Fgp7o8XnT/8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mRitRSQbZg+t+Yitmrlazd3Gv29s6LA+mWVY0hzX8z6Ge9EHcyUO4Te5TllMsUc5A FVB+4nypAcr+6ZtnUQKKDKgg4x3+Lq+um4+jrQEJOHjtwlUd4EucYgAPFL5CoP+9cr pKLglkGQxlwQv7T6iTnIPAZT5SJD3e6ZhEyoH0Bg= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Hong Liu , Jiri Kosina , Sasha Levin , linux-input@vger.kernel.org Subject: [PATCH AUTOSEL 4.9 44/87] HID: intel-ish-hid: avoid binding wrong ishtp_cl_device Date: Wed, 27 Mar 2019 14:19:57 -0400 Message-Id: <20190327182040.17444-44-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190327182040.17444-1-sashal@kernel.org> References: <20190327182040.17444-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hong Liu [ Upstream commit 0d28f49412405d87d3aae83da255070a46e67627 ] When performing a warm reset in ishtp bus driver, the ishtp_cl_device will not be removed, its fw_client still points to the already freed ishtp_device.fw_clients array. Later after driver finishing ishtp client enumeration, this dangling pointer may cause driver to bind the wrong ishtp_cl_device to the new client, causing wrong callback to be called for messages intended for the new client. This helps in development of firmware where frequent switching of firmwares is required without Linux reboot. Signed-off-by: Hong Liu Tested-by: Hongyan Song Acked-by: Srinivas Pandruvada Signed-off-by: Jiri Kosina Signed-off-by: Sasha Levin --- drivers/hid/intel-ish-hid/ishtp/bus.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c index 256521509d20..0de18c76f8d4 100644 --- a/drivers/hid/intel-ish-hid/ishtp/bus.c +++ b/drivers/hid/intel-ish-hid/ishtp/bus.c @@ -628,7 +628,8 @@ int ishtp_cl_device_bind(struct ishtp_cl *cl) spin_lock_irqsave(&cl->dev->device_list_lock, flags); list_for_each_entry(cl_device, &cl->dev->device_list, device_link) { - if (cl_device->fw_client->client_id == cl->fw_client_id) { + if (cl_device->fw_client && + cl_device->fw_client->client_id == cl->fw_client_id) { cl->device = cl_device; rv = 0; break; @@ -688,6 +689,7 @@ void ishtp_bus_remove_all_clients(struct ishtp_device *ishtp_dev, spin_lock_irqsave(&ishtp_dev->device_list_lock, flags); list_for_each_entry_safe(cl_device, n, &ishtp_dev->device_list, device_link) { + cl_device->fw_client = NULL; if (warm_reset && cl_device->reference_count) continue; -- 2.19.1