public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
* FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree
@ 2025-04-17 11:43 gregkh
  2025-04-17 13:36 ` [PATCH 6.6.y] iommufd: Fail replace if device has not been attached Yi Liu
  2025-04-17 14:35 ` FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree Yi Liu
  0 siblings, 2 replies; 4+ messages in thread
From: gregkh @ 2025-04-17 11:43 UTC (permalink / raw)
  To: yi.l.liu, jgg, kevin.tian; +Cc: stable


The patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable@vger.kernel.org>.

To reproduce the conflict and resubmit, you may use the following commands:

git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 55c85fa7579dc2e3f5399ef5bad67a44257c1a48
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<stable@vger.kernel.org>' --in-reply-to '2025041701-immovable-patio-2e75@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..

Possible dependencies:



thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 55c85fa7579dc2e3f5399ef5bad67a44257c1a48 Mon Sep 17 00:00:00 2001
From: Yi Liu <yi.l.liu@intel.com>
Date: Wed, 5 Mar 2025 19:48:42 -0800
Subject: [PATCH] iommufd: Fail replace if device has not been attached

The current implementation of iommufd_device_do_replace() implicitly
assumes that the input device has already been attached. However, there
is no explicit check to verify this assumption. If another device within
the same group has been attached, the replace operation might succeed,
but the input device itself may not have been attached yet.

As a result, the input device might not be tracked in the
igroup->device_list, and its reserved IOVA might not be added. Despite
this, the caller might incorrectly assume that the device has been
successfully replaced, which could lead to unexpected behavior or errors.

To address this issue, add a check to ensure that the input device has
been attached before proceeding with the replace operation. This check
will help maintain the integrity of the device tracking system and prevent
potential issues arising from incorrect assumptions about the device's
attachment status.

Fixes: e88d4ec154a8 ("iommufd: Add iommufd_device_replace()")
Link: https://patch.msgid.link/r/20250306034842.5950-1-yi.l.liu@intel.com
Cc: stable@vger.kernel.org
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
index b2f0cb909e6d..bd50146e2ad0 100644
--- a/drivers/iommu/iommufd/device.c
+++ b/drivers/iommu/iommufd/device.c
@@ -471,6 +471,17 @@ iommufd_device_attach_reserved_iova(struct iommufd_device *idev,
 
 /* The device attach/detach/replace helpers for attach_handle */
 
+/* Check if idev is attached to igroup->hwpt */
+static bool iommufd_device_is_attached(struct iommufd_device *idev)
+{
+	struct iommufd_device *cur;
+
+	list_for_each_entry(cur, &idev->igroup->device_list, group_item)
+		if (cur == idev)
+			return true;
+	return false;
+}
+
 static int iommufd_hwpt_attach_device(struct iommufd_hw_pagetable *hwpt,
 				      struct iommufd_device *idev)
 {
@@ -710,6 +721,11 @@ iommufd_device_do_replace(struct iommufd_device *idev,
 		goto err_unlock;
 	}
 
+	if (!iommufd_device_is_attached(idev)) {
+		rc = -EINVAL;
+		goto err_unlock;
+	}
+
 	if (hwpt == igroup->hwpt) {
 		mutex_unlock(&idev->igroup->lock);
 		return NULL;


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 6.6.y] iommufd: Fail replace if device has not been attached
  2025-04-17 11:43 FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree gregkh
@ 2025-04-17 13:36 ` Yi Liu
  2025-04-18 15:42   ` Sasha Levin
  2025-04-17 14:35 ` FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree Yi Liu
  1 sibling, 1 reply; 4+ messages in thread
From: Yi Liu @ 2025-04-17 13:36 UTC (permalink / raw)
  To: stable; +Cc: Yi Liu, Kevin Tian, Jason Gunthorpe

The current implementation of iommufd_device_do_replace() implicitly
assumes that the input device has already been attached. However, there
is no explicit check to verify this assumption. If another device within
the same group has been attached, the replace operation might succeed,
but the input device itself may not have been attached yet.

As a result, the input device might not be tracked in the
igroup->device_list, and its reserved IOVA might not be added. Despite
this, the caller might incorrectly assume that the device has been
successfully replaced, which could lead to unexpected behavior or errors.

To address this issue, add a check to ensure that the input device has
been attached before proceeding with the replace operation. This check
will help maintain the integrity of the device tracking system and prevent
potential issues arising from incorrect assumptions about the device's
attachment status.

Fixes: e88d4ec154a8 ("iommufd: Add iommufd_device_replace()")
Link: https://patch.msgid.link/r/20250306034842.5950-1-yi.l.liu@intel.com
Cc: stable@vger.kernel.org
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
---
 drivers/iommu/iommufd/device.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
index ce78c3671539..55866c29fb57 100644
--- a/drivers/iommu/iommufd/device.c
+++ b/drivers/iommu/iommufd/device.c
@@ -407,6 +407,17 @@ iommufd_device_do_attach(struct iommufd_device *idev,
 	return NULL;
 }
 
+/* Check if idev is attached to igroup->hwpt */
+static bool iommufd_device_is_attached(struct iommufd_device *idev)
+{
+	struct iommufd_device *cur;
+
+	list_for_each_entry(cur, &idev->igroup->device_list, group_item)
+		if (cur == idev)
+			return true;
+	return false;
+}
+
 static struct iommufd_hw_pagetable *
 iommufd_device_do_replace(struct iommufd_device *idev,
 			  struct iommufd_hw_pagetable *hwpt)
@@ -424,6 +435,11 @@ iommufd_device_do_replace(struct iommufd_device *idev,
 		goto err_unlock;
 	}
 
+	if (!iommufd_device_is_attached(idev)) {
+		rc = -EINVAL;
+		goto err_unlock;
+	}
+
 	if (hwpt == igroup->hwpt) {
 		mutex_unlock(&idev->igroup->lock);
 		return NULL;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree
  2025-04-17 11:43 FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree gregkh
  2025-04-17 13:36 ` [PATCH 6.6.y] iommufd: Fail replace if device has not been attached Yi Liu
@ 2025-04-17 14:35 ` Yi Liu
  1 sibling, 0 replies; 4+ messages in thread
From: Yi Liu @ 2025-04-17 14:35 UTC (permalink / raw)
  To: gregkh, jgg, kevin.tian; +Cc: stable

On 2025/4/17 19:43, gregkh@linuxfoundation.org wrote:
> 
> The patch below does not apply to the 6.6-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@vger.kernel.org>.
> 
> To reproduce the conflict and resubmit, you may use the following commands:
> 
> git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
> git checkout FETCH_HEAD
> git cherry-pick -x 55c85fa7579dc2e3f5399ef5bad67a44257c1a48
> # <resolve conflicts, build, test, etc.>
> git commit -s
> git send-email --to '<stable@vger.kernel.org>' --in-reply-to '2025041701-immovable-patio-2e75@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
> 
> Possible dependencies:

The most relevant commit is fb21b1568adaa76af7a8c853f37c60fba8b28661.

While fb21b1568adaa76af7a8c853f37c60fba8b28661 itself might depend on
the below series. I doubt if it is simpler just make a separate fix against
6.6.

https://lore.kernel.org/linux-iommu/20240702063444.105814-2-baolu.lu@linux.intel.com/

-- 
Regards,
Yi Liu

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 6.6.y] iommufd: Fail replace if device has not been attached
  2025-04-17 13:36 ` [PATCH 6.6.y] iommufd: Fail replace if device has not been attached Yi Liu
@ 2025-04-18 15:42   ` Sasha Levin
  0 siblings, 0 replies; 4+ messages in thread
From: Sasha Levin @ 2025-04-18 15:42 UTC (permalink / raw)
  To: stable, yi.l.liu; +Cc: Sasha Levin

[ Sasha's backport helper bot ]

Hi,

Summary of potential issues:
⚠️ Found matching upstream commit but patch is missing proper reference to it

Found matching upstream commit: 55c85fa7579dc2e3f5399ef5bad67a44257c1a48

Status in newer kernel trees:
6.14.y | Not found
6.13.y | Not found
6.12.y | Not found

Note: The patch differs from the upstream commit:
---
1:  55c85fa7579dc ! 1:  8310b5beec2ea iommufd: Fail replace if device has not been attached
    @@ Commit message
         Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
     
      ## drivers/iommu/iommufd/device.c ##
    -@@ drivers/iommu/iommufd/device.c: iommufd_device_attach_reserved_iova(struct iommufd_device *idev,
    - 
    - /* The device attach/detach/replace helpers for attach_handle */
    +@@ drivers/iommu/iommufd/device.c: iommufd_device_do_attach(struct iommufd_device *idev,
    + 	return NULL;
    + }
      
     +/* Check if idev is attached to igroup->hwpt */
     +static bool iommufd_device_is_attached(struct iommufd_device *idev)
    @@ drivers/iommu/iommufd/device.c: iommufd_device_attach_reserved_iova(struct iommu
     +	return false;
     +}
     +
    - static int iommufd_hwpt_attach_device(struct iommufd_hw_pagetable *hwpt,
    - 				      struct iommufd_device *idev)
    - {
    + static struct iommufd_hw_pagetable *
    + iommufd_device_do_replace(struct iommufd_device *idev,
    + 			  struct iommufd_hw_pagetable *hwpt)
     @@ drivers/iommu/iommufd/device.c: iommufd_device_do_replace(struct iommufd_device *idev,
      		goto err_unlock;
      	}
---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.6.y        |  Success    |  Success   |

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-04-18 15:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-17 11:43 FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree gregkh
2025-04-17 13:36 ` [PATCH 6.6.y] iommufd: Fail replace if device has not been attached Yi Liu
2025-04-18 15:42   ` Sasha Levin
2025-04-17 14:35 ` FAILED: patch "[PATCH] iommufd: Fail replace if device has not been attached" failed to apply to 6.6-stable tree Yi Liu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox