From nobody Sat Jul 25 20:08:11 2026 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD37B3D9043; Tue, 14 Jul 2026 06:10:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009444; cv=none; b=GgjFBmrR7tnCPVe4h5aotnQb8s2YXhFH4/eMYHa6ZGUSPf0/xsk4t8uPAgKOkw9lvZPZOL62kCTKStb4fkap1X01g4lSWyWLRV0dmzxt9k8ech9ypKdoAByzovgeB9sjljqKZHYCPG+H7JpW02DpRPqZ83MJiSyts0mxWB6cH08= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009444; c=relaxed/simple; bh=OK6F+QADPy1VWZWq5kaE5EqHcErchmyJYXKrGpnsvXE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Sn3EUuN2NlCHtxVKJCLt95uv77b2a9Gv+wcp9G9tdZtyKxTZfXUFutRbrhmXunbSbD/04s0sxYx5eCGX1KPTAlwy7a6falRTvdqejyKGPvhNe63QT4f/0qxhofsZsyfJeRPKFFUHFqJ2NV++mpig3a3v6w3fQkc5db2EHQzc3Kw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=DdqhWYc6; arc=none smtp.client-ip=220.197.31.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="DdqhWYc6" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=dS Md5BPF4fYsYrSjBZEUKbIw8wpxukNBKTZpcMK3Duo=; b=DdqhWYc66UcFUgEnhy cf1r+XH3UNq0EIYmW8zU6iHHiZf1TLAWcUBEyJQ221DA601xIR1WzSQzIU3abw4Q 8DBC1TkBft4NfF7z0vtaHEMl3B2MhtPkj1zWtttsII1AyGQ5hZdxbvDz91Xtkfnd d8OJBbnJgKXcALciSuMVeZOs8= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzsmtp4 (Coremail) with SMTP id PygvCgAnwyab0lVqrG_HHA--.5129S3; Tue, 14 Jul 2026 14:09:47 +0800 (CST) From: weimin xiong To: Will Deacon , Robin Murphy , Joerg Roedel Cc: Benjamin Gaignard , Rob Clark , linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, weimin xiong Subject: [PATCH v1 1/4] iommu/arm-smmu: Fix fwnode lookup lifetime handling Date: Tue, 14 Jul 2026 14:09:27 +0800 Message-ID: <20260714060930.220277-2-xiongwm2026@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260714060930.220277-1-xiongwm2026@163.com> References: <20260714060930.220277-1-xiongwm2026@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: PygvCgAnwyab0lVqrG_HHA--.5129S3 X-Coremail-Antispam: 1Uf129KBjvJXoW7CryDZr43Ar15GF1ruw1fCrg_yoW8Xw15pF WUCFyYvrWUWF1jkr4DJw1rAF1Y9a10yas5CrW8C3s09w13ta45tFy8KFyagwn5CrZ5J3W3 tr9Fq3yrCF98ArJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UH6wtUUUUU= X-CM-SenderInfo: x0lr0wdzpsijqw6rljoofrz/xtbC7wvOXmpV0qsbnwAA32 Content-Type: text/plain; charset="utf-8" bus_find_device_by_fwnode() returns a device with its reference count incremented. arm_smmu_get_by_fwnode() drops that reference before reading the driver data, which leaves the returned pointer derived from a device after its reference has been released. Read the driver data before put_device(). Also handle a failed lookup in arm_smmu_probe_device() before dereferencing the returned SMMU pointer. Signed-off-by: weimin xiong --- drivers/iommu/arm/arm-smmu/arm-smmu.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-= smmu/arm-smmu.c index 0bd21d206..b70c307b8 100644 --- a/drivers/iommu/arm/arm-smmu/arm-smmu.c +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c @@ -1426,9 +1426,15 @@ static struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnod= e) { struct device *dev =3D bus_find_device_by_fwnode(&platform_bus_type, fwno= de); + struct arm_smmu_device *smmu; + + if (!dev) + return NULL; =20 + smmu =3D dev_get_drvdata(dev); put_device(dev); - return dev ? dev_get_drvdata(dev) : NULL; + + return smmu; } =20 static struct iommu_device *arm_smmu_probe_device(struct device *dev) @@ -1451,6 +1457,10 @@ static struct iommu_device *arm_smmu_probe_device(st= ruct device *dev) goto out_free; } else { smmu =3D arm_smmu_get_by_fwnode(fwspec->iommu_fwnode); + if (!smmu) { + ret =3D -ENODEV; + goto out_free; + } } =20 ret =3D -EINVAL; --=20 2.43.0 From nobody Sat Jul 25 20:08:11 2026 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3AE93D890E; Tue, 14 Jul 2026 06:10:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.3 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009438; cv=none; b=SRkP2KXU7ofdGgVmlvuhnPLZavDaLMTbsdv9EXBG9/PsheYgbFYscsv8n3G/3yA+k80sEUwUq5hOY3YIp53VzaOdbWmwzv/sgw2Bez7k2iACVTc7Vvbz2hx/1jYKR9eDYlBJej6/b38sAF+mCFvp788y4pdjY63htRPbMQnz6jg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009438; c=relaxed/simple; bh=/zk7nGNl3dB++t62aMOiEHIuhmWOXP6KRdHJMEJHOjk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HynT60w42LQ3qvF/v9Mdt4BF+XQRq4IqNW1PVKdoEgwCKjepK8ZMlATdQebrmffsihcGbeJCYfTT1SQx+9zJNTPRVBvO9ZCfTYC5oqPsi756xYFGYkvZ8p/iNjWd696JuH5sT636fG3tbjhHG0l+wLz6zDTEQWJIIWXmfHr+GBE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=U+wYA/Ea; arc=none smtp.client-ip=117.135.210.3 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="U+wYA/Ea" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=ZW 71BHzQut9m5+gFs8IhfBSqnJb/qt1PIQnhKAHYDfM=; b=U+wYA/EaIbmtWiu60G 8is+Hhskr2gPlrIcjjkeNGnGs5PSEgmQMc478N+VTetIwYyid9BRnMGeVULMHOov zgW1A2/dO3Dx8kMXl44k20dcnexHpGYagNm0rlfr6HPWpFZgtVfw/aU7zW3Mm8K+ 4Ix1BbjdwX7qaVp0Z8XFBktMY= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzsmtp4 (Coremail) with SMTP id PygvCgAnwyab0lVqrG_HHA--.5129S4; Tue, 14 Jul 2026 14:09:48 +0800 (CST) From: weimin xiong To: Will Deacon , Robin Murphy , Joerg Roedel Cc: Benjamin Gaignard , Rob Clark , linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, weimin xiong Subject: [PATCH v1 2/4] iommu/arm-smmu-v3: Fix fwnode lookup lifetime handling Date: Tue, 14 Jul 2026 14:09:28 +0800 Message-ID: <20260714060930.220277-3-xiongwm2026@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260714060930.220277-1-xiongwm2026@163.com> References: <20260714060930.220277-1-xiongwm2026@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: PygvCgAnwyab0lVqrG_HHA--.5129S4 X-Coremail-Antispam: 1Uf129KBjvJXoW7Gr1DWr48urWrJF47JF18Zrb_yoW8JF45pa yUuF90kryDW3W2k3srXF1ayFy5ua1Fya4rtrW8u3s09wn5tryfGryxtF9Fgrn5CrWrJF13 trn2q3yrCFn8ArJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07Ul4iUUUUUU= X-CM-SenderInfo: x0lr0wdzpsijqw6rljoofrz/xtbCzQzPX2pV0qz4CQAA3h Content-Type: text/plain; charset="utf-8" bus_find_device_by_fwnode() returns a device with its reference count incremented. arm_smmu_get_by_fwnode() drops that reference before reading the driver data, which leaves the returned pointer derived from a device after its reference has been released. Read the driver data before put_device() and return NULL directly when the lookup fails. Signed-off-by: weimin xiong Reviewed-by: Jason Gunthorpe --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/ar= m/arm-smmu-v3/arm-smmu-v3.c index a10affb48..ef53dd703 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -3980,9 +3980,15 @@ static struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnod= e) { struct device *dev =3D bus_find_device_by_fwnode(&platform_bus_type, fwno= de); + struct arm_smmu_device *smmu; + + if (!dev) + return NULL; =20 + smmu =3D dev_get_drvdata(dev); put_device(dev); - return dev ? dev_get_drvdata(dev) : NULL; + + return smmu; } =20 static bool arm_smmu_sid_in_range(struct arm_smmu_device *smmu, u32 sid) --=20 2.43.0 From nobody Sat Jul 25 20:08:11 2026 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C86CC3D8912; Tue, 14 Jul 2026 06:10:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009437; cv=none; b=AowAc8zUv3QRWr74efmJ39M8gy3CMC3jHJJ35x/83bzl76qyfyvyI6Tp8nsOg6YWVthep26nwxhU1XYErntbk1E5jS5yniWxzFJIEtqvgaDQws6x0xvB5ql77c8w1UrjET9kt83Bbm9LWGHXyOML7zHdYe12v/OFbaPLi+yjFkM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009437; c=relaxed/simple; bh=h1rcSZIJCx1s78fckibab2t0DEvvfwOPISuMFxICZCI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aVPbMYj5f9rC+9wL9+1PVnvs8TDxCKiqAt9wszqVTonHQyWEtCxOYRH1szkApSZcOOvoJmva0qGmJmB/0JYNGzTkN/6FuyC7NME3T8PjMJvs3BKClCQIPqnIxqwqMnkpuFb4bEthulMu8AAJQNa7jlIGJ96HSCxZc/DSYicmz5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=iqI/ShWL; arc=none smtp.client-ip=220.197.31.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="iqI/ShWL" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=fO rVLDpGjRjUa+f8VzrtP6B9hFELin8qYtwTJlLmQHk=; b=iqI/ShWLN0QGPUqjSJ HV4sJ1rtMWL3tWOLVElIvwBK6ZSAS4vfu0sssBfLo/bYGEpI3L73sIP+ni1SSqUT CmAr7QEESbFj+puJ3v3C2uYKuvXUwn8posOU/mE9sIfmLZjymxF95WZIUJm21bsD UnPKkFa6CVRl/0wW+XDTRAaMM= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzsmtp4 (Coremail) with SMTP id PygvCgAnwyab0lVqrG_HHA--.5129S5; Tue, 14 Jul 2026 14:09:48 +0800 (CST) From: weimin xiong To: Will Deacon , Robin Murphy , Joerg Roedel Cc: Benjamin Gaignard , Rob Clark , linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, weimin xiong Subject: [PATCH v1 3/4] iommu/vsi: Fix fwnode lookup lifetime handling Date: Tue, 14 Jul 2026 14:09:29 +0800 Message-ID: <20260714060930.220277-4-xiongwm2026@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260714060930.220277-1-xiongwm2026@163.com> References: <20260714060930.220277-1-xiongwm2026@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: PygvCgAnwyab0lVqrG_HHA--.5129S5 X-Coremail-Antispam: 1Uf129KBjvJXoW7KFyrGF1DJw1fCw47uF45Jrb_yoW8Ww45pF WUGayYkrWUXF10gF47C3W5CFyYvws2va4I9rW5tw4v9w1rtrW8ta4UJryjqryrCFZ5J3W7 Kw13ta97CFy5A3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jeg4fUUUUU= X-CM-SenderInfo: x0lr0wdzpsijqw6rljoofrz/xtbCzgzPX2pV0qyd0gAA3c Content-Type: text/plain; charset="utf-8" bus_find_device_by_fwnode() returns a device with its reference count incremented. vsi_iommu_get_from_dev() drops that reference before reading the driver data, which leaves the returned pointer derived from a device after its reference has been released. Read the driver data before put_device(). Also make vsi_iommu_probe_device() fail with -ENODEV when the IOMMU cannot be found instead of dereferencing a NULL pointer. Signed-off-by: weimin xiong --- drivers/iommu/vsi-iommu.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/vsi-iommu.c b/drivers/iommu/vsi-iommu.c index 42c424496..d19db561e 100644 --- a/drivers/iommu/vsi-iommu.c +++ b/drivers/iommu/vsi-iommu.c @@ -220,10 +220,15 @@ static struct vsi_iommu *vsi_iommu_get_from_dev(struc= t device *dev) struct iommu_fwspec *fwspec =3D dev_iommu_fwspec_get(dev); struct device *iommu_dev =3D bus_find_device_by_fwnode(&platform_bus_type, fwspec->iommu_fwnode); + struct vsi_iommu *iommu; + + if (!iommu_dev) + return NULL; =20 + iommu =3D dev_get_drvdata(iommu_dev); put_device(iommu_dev); =20 - return iommu_dev ? dev_get_drvdata(iommu_dev) : NULL; + return iommu; } =20 static struct iommu_domain *vsi_iommu_domain_alloc_paging(struct device *d= ev) @@ -619,6 +624,9 @@ static struct iommu_device *vsi_iommu_probe_device(stru= ct device *dev) struct vsi_iommu *iommu =3D vsi_iommu_get_from_dev(dev); struct device_link *link; =20 + if (!iommu) + return ERR_PTR(-ENODEV); + link =3D device_link_add(dev, iommu->dev, DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME); if (!link) --=20 2.43.0 From nobody Sat Jul 25 20:08:11 2026 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A2F53D6493; Tue, 14 Jul 2026 06:10:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009443; cv=none; b=PlO1DoiVg3McDA5NkQpjfekE/8JwSoiNpsmbzgm+lb0xPDqm3gDyOvbW3eHssukOrd51zc99SQMk84FSa7BAX/fP3NsAwwBGxZCDlmdqKTqn3OS230pT9L59yLyLonPsXduS7bORO9bg++XGFcNe8o8qWdiw23QswEp1lDDF65Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784009443; c=relaxed/simple; bh=CbzYCqfUOj4SifOJuD5PCQjjfoR5mDCOVqJzrEwDTU0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DZefM7qJr9ogy+5oDmepnlwFY9q0DbtXCPQCklS1PSznAmI6J0GsmwiOROPM6NOR8sH5B2zbpsPYdvqM2QtDRDTZDxxzXtvFbdTRbGarQ2kH+ni+QTu1+IJQUA73OlW6nA9kqSf/YHZ3BWuZX+62q/7JBo1X4P1T0pdZQXNIJ1M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=eAVwSu2R; arc=none smtp.client-ip=220.197.31.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="eAVwSu2R" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=Qg KBOpsQ6v0plaOyS+PBWO+c7M1uIEDREuFLY6J4zik=; b=eAVwSu2R1PeW98TO1z HbKR78s3Gp2nH32r/6OXX2wxmQXBkkFuPfbaEg8n8+L7WLyA18yG3ZhgvNPSRkC0 P5lN1Lxdfp8vwGxv2Ziz6R/yuEMAwwdFeqkwnnXiwSOBh8opXdsDuXJwc9VfTDUm 7rk8iTcMKZWoHYD870tzUMsxw= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzsmtp4 (Coremail) with SMTP id PygvCgAnwyab0lVqrG_HHA--.5129S6; Tue, 14 Jul 2026 14:09:48 +0800 (CST) From: weimin xiong To: Will Deacon , Robin Murphy , Joerg Roedel Cc: Benjamin Gaignard , Rob Clark , linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, weimin xiong Subject: [PATCH v1 4/4] iommu/msm: Clean up probe state on registration failure Date: Tue, 14 Jul 2026 14:09:30 +0800 Message-ID: <20260714060930.220277-5-xiongwm2026@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260714060930.220277-1-xiongwm2026@163.com> References: <20260714060930.220277-1-xiongwm2026@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: PygvCgAnwyab0lVqrG_HHA--.5129S6 X-Coremail-Antispam: 1Uf129KBjvJXoW7Ww48JFy3tF4kCFW5ZFW7CFg_yoW8XrWxpF 47W3909r1kK3WfKF47AF18uFn0krZFya45uF4fWa9F9r15ArWUXFZ3KFW5tr45GrWkGa17 Aay3Jr4S9F15Cr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UVlk3UUUUU= X-CM-SenderInfo: x0lr0wdzpsijqw6rljoofrz/xtbCzgzPX2pV0qyd1wAA3Z Content-Type: text/plain; charset="utf-8" msm_iommu_probe() adds the IOMMU to qcom_iommu_devices before creating the IOMMU sysfs device and registering the IOMMU. If either of those later steps fails, the function returns without undoing the list insertion. The iommu_device_register() failure path also leaves the sysfs device behind. Add shared error labels so the list entry and sysfs device are unwound in the reverse order of setup. Signed-off-by: weimin xiong --- drivers/iommu/msm_iommu.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c index 0ad5ff431..d0d926be7 100644 --- a/drivers/iommu/msm_iommu.c +++ b/drivers/iommu/msm_iommu.c @@ -784,19 +784,25 @@ static int msm_iommu_probe(struct platform_device *pd= ev) "msm-smmu.%pa", &ioaddr); if (ret) { pr_err("Could not add msm-smmu at %pa to sysfs\n", &ioaddr); - return ret; + goto err_remove_list; } =20 ret =3D iommu_device_register(&iommu->iommu, &msm_iommu_ops, &pdev->dev); if (ret) { pr_err("Could not register msm-smmu at %pa\n", &ioaddr); - return ret; + goto err_remove_sysfs; } =20 pr_info("device mapped at %p, irq %d with %d ctx banks\n", iommu->base, iommu->irq, iommu->ncb); =20 return ret; + +err_remove_sysfs: + iommu_device_sysfs_remove(&iommu->iommu); +err_remove_list: + list_del(&iommu->dev_node); + return ret; } =20 static const struct of_device_id msm_iommu_dt_match[] =3D { --=20 2.43.0