]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iommufd: Break the loop on failure in iommufd_fault_fops_read()
authorNicolin Chen <nicolinc@nvidia.com>
Mon, 1 Jun 2026 20:42:36 +0000 (13:42 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 5 Jun 2026 14:07:12 +0000 (11:07 -0300)
On a copy_to_user() failure inside the inner list_for_each_entry, only the
inner loop breaks; the outer while re-fetches the just-restored fault group
and retries the failing copy_to_user() forever, spinning the reader at 100%
CPU with fault->mutex held.

Check rc after the inner loop and break the outer while as well.

Fixes: 07838f7fd529 ("iommufd: Add iommufd fault object")
Link: https://patch.msgid.link/r/336a9b6e44fe66a24199d3be777c405c85c98622.1780343944.git.nicolinc@nvidia.com
Cc: stable@vger.kernel.org
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Pranjal Shrivastava <praan@google.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/iommufd/eventq.c

index 613024ca8f1ff530b69eae39af78f5cbbda52f8a..1c010e691f972f710fed736b38a59fd791d8a6ad 100644 (file)
@@ -168,6 +168,8 @@ static ssize_t iommufd_fault_fops_read(struct file *filep, char __user *buf,
                        }
                        done += fault_size;
                }
+               if (rc)
+                       break;
        }
        mutex_unlock(&fault->mutex);