From nobody Mon Jun 8 14:35:32 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D215B1C3318 for ; Thu, 28 May 2026 20:23:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999839; cv=none; b=bzQoCj37NkTOBbDhHbq4chqNKhDaHe+oGhsSnQom94oSBghIlO0KisWuAppzq+asfyekPk3R4+lQmZ0BGkFDZ11aD9UHYQqEX5MIRguwLAvYUsuDKMGb+6PXNtbgNONgtmycjZ2L9iH2JPxKq5gHo9Vy14fy8CHxj2G3GUnxrYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999839; c=relaxed/simple; bh=6JPZRBT6suYUThuvCh6y+NiY5DV75TOqoNSPL+EfItk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dCMFD6imbNTijN+fBeDVRyNXxZqTusJCxyzCHiIML735fyAW2dt1RwS7aLMBXVx1vJ97/rXJv9dUvmY57oE3q0AdZIOmziLzTKKNvzSoV4pnBmiEYhoKiwEKyUcmpJEjCiz1OPO9bsoxRCURwXSjc4NapoD317o/9YrsfmGoAYc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YGoFNj8c; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YGoFNj8c" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3663cbff31cso7772889a91.2 for ; Thu, 28 May 2026 13:23:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779999838; x=1780604638; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xwbylVdF+O+8AihJparLUGU02SRqGSrn4Cd3mbYF5r4=; b=YGoFNj8csgKXXUq3hSOwz8usr620b/KV1l1sMFLzaIbJyaWGVdUnmsTrdpNHfcP99P FixGUAZa5tJM/yxrjvUWIIQbhlAOmhtXYA8E3kE6YCoP5qJ8swBqsd7pEbEDwlNDyvAp mw51qf1IY4KMRwb4ZSXXQ5uW2V40ZPlJOxpc9XBXjZikHBAK/Gq4Pa1gYYQQRRwootot DB8szYuIbidakCd9DveDIGHn3VZDhTIjX1/TXkXclIibMItaXs+NML2ED/XdHnt3V4xK vrGtIbLN0G5Kgt17qOSo9gQ3pYkeNNUGZk9PxZGIQF76pT+0FVTxCFRFmMQFL83Msi4e VxZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779999838; x=1780604638; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xwbylVdF+O+8AihJparLUGU02SRqGSrn4Cd3mbYF5r4=; b=Tk3hQfjYQ8NghY+ydu04A78P1n+n+7JIQDQv687TImf5nnHnDBTLKbAQPaZaNjJzl6 H1Or8P0ryl2MFRax57NPWJLR2hEBoROOJIJqcFSanlpCBcgN9TV9KhN8+lsa0bpQc6KY eq8VXXh//54jTvTvzxDiGQ74m39MUgI3RIzJJ5iBd95JQbhj0JsfSbChRZPTttH8GN7Z vGuo7DvE2p7BBCN7VZhmB7yyYXwwKaDQsfYxn3kPIPUJrk/hAbPKwA4HL7FjE6tLjyq0 HevOnktSqfB/pGeQTYawkCeiMW0B3X4h02z44XGff5j8TSRlQsjxBaTpIhLfWLoVEkEz /INA== X-Forwarded-Encrypted: i=1; AFNElJ8oiUwczhqQl9GsKjh6RAPyJX2RVR8ShMTQJbQE8XwDaX+kIbQbbExMepPjcY+OhFDxs25/GRIjWZAvLzM=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7/thlrVELSrXiWs1Prp5ueJ2qR3adLN+GnYBk9N++hfugQOK9 0GpIjq4fH0hP9pmGeTh+GmJ8Lyk+j5wIw4BvhFZl9xTKPdyaShly7pyLbI6TqsybPFiTzU4FVuQ ufQ== X-Received: from pjbcu14.prod.google.com ([2002:a17:90a:fa8e:b0:369:9cde:eaa0]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:e7c9:b0:368:1088:bb1d with SMTP id 98e67ed59e1d1-36bbcfd9807mr90130a91.15.1779999837989; Thu, 28 May 2026 13:23:57 -0700 (PDT) Date: Thu, 28 May 2026 20:23:47 +0000 In-Reply-To: <20260528202353.3422206-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260528202353.3422206-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260528202353.3422206-2-praan@google.com> Subject: [PATCH v5 1/7] PCI/ATS: Ensure pci_ats_supported() is PF-aware for VFs From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava , Jason Gunthorpe Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update pci_ats_supported() to additionally check the associated PF's status when called on a VF. This ensures that PF-level quirks and untrusted status are correctly propagated to VFs, providing a robust support check that aligns with the kernel's PF-centric ATS configuration model and is immune to the timing of VF-specific fixups. Reviewed-by: Jason Gunthorpe Reviewed-by: Samiullah Khawaja Reviewed-by: Nicolin Chen Signed-off-by: Pranjal Shrivastava Reviewed-by: Lu Baolu --- drivers/pci/ats.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index 96efa00d9743..679a3c3c1d54 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -40,10 +40,13 @@ void pci_ats_init(struct pci_dev *dev) */ bool pci_ats_supported(struct pci_dev *dev) { - if (!dev->ats_cap) + if (!dev->ats_cap || dev->untrusted) return false; =20 - return (dev->untrusted =3D=3D 0); + if (dev->is_virtfn) + return pci_ats_supported(pci_physfn(dev)); + + return true; } EXPORT_SYMBOL_GPL(pci_ats_supported); =20 --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 14:35:32 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBFFD3101B0 for ; Thu, 28 May 2026 20:24:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999842; cv=none; b=nIUzfAk7E0feWurVJuWZqmLCb4tF0P/oXCSQTI6VTDSSd3HVZOeE0t42iZuWqeZRFv/3Z8eHxX/tK8VzHWhE3tzhBsR3+0lxgvgZ0ebqXQHwCdi1XOfzTo9xuLT2m3DKTSb0p9jOV4RCEqTJKmH2RgzQKKso/Ttv7/i62z2Xv/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999842; c=relaxed/simple; bh=F6ojs5rWNCGgcIvYOOYdZlatLwDA9SzzUTg4lrzHeVY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GgJop0tT2OOYnUuW7EIBoP6PxuTkEZnFAU0Thmr+xYA993Y72a+Hdm5hSXRY1slgogOHNRkHUWOyqYaj4P0B014oYE0Ty/vmgYgeKFBC7XR825ctwWvEpTNzYim/2uzgecfo8PEb2X+3vubNNtAW0meZ4VlMZCcw8Wlvu/r9nTw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=VvSwoyyN; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VvSwoyyN" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c82ba4715b6so14148026a12.2 for ; Thu, 28 May 2026 13:24:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779999840; x=1780604640; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=c6562tSqUW4FPLuBReRttsQP9VRgygDGjnIRvKk2fg8=; b=VvSwoyyN+GKnZnCoQFZG0a1ZwAKS1K2zKhN2nrM5HO6J+qyYKHRaJtqKj+iL1RD8Ue 2RXNCLkIvVxoNaNRUTFCNH44BN/gPeWxH+pwJX7Lenq9ykNnWrUlduirnvjXaH9vADBP fn/RjH2lYPSbZPZ8oaA7uH7Y2JkJ7y0k1wWFntwTg+VjyW27NBb9+Mb5+otHd/6tvRwl z3bJADsocc8Z5VSa+p3WwkPSpWiAwKrkIlpcuyFpQjZ9+tyTWGqMoR/5LrqL1v9cnQGp d5Bb2M12OGAn8nzLOO68CkqobAxu54MZ9CmKkmCuHSAhPaWajaugDyxp3lBXPFq5ZK4h LTTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779999840; x=1780604640; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=c6562tSqUW4FPLuBReRttsQP9VRgygDGjnIRvKk2fg8=; b=YegWgTrvdLg/L3UAcUmCvC5K34tr/PiuCfmYcrEYkvQUExUfqINQ4kUNEcSazF4Jmo CyJBLFAISadH22KgO3o5jWHeqGFyiULzWEjkBr7ibEE6xfzZUv/HhFz/ESEFqqcfAuHM 1rNCHWsadLwKWZ6LAAkLlbNq9PiPfd4r5eVFlTi8S5CVtVmYOqeL7cIYuOSi6CAaNK9V Unl5DJ7X1Nit9ifp3ghl23kFntpF/0VGcV/3Ket+7sLwYdzm/TLeIC6WozZnlmX4b+XJ 4SsNMRH+YfFhOwcLLPYGg3hLoMaaM+wRdt0nNw3jMSIv18E6nIVi+N6PW2Po+Z3Fksvy K0Vw== X-Forwarded-Encrypted: i=1; AFNElJ+V72nkrXpwKqF1iJyR1kblhce53K21Y5frJCDvuuGVBwF+SGcK2nJtzpzVIX4kxdrVG5Qj92XUJEI+Pfs=@vger.kernel.org X-Gm-Message-State: AOJu0YyiwUfp7CNKVEjXmD8Pe8GnPXoHJyv03bAvtgsV5C+6eZZ5754r qpOP6eNh7KHKYrOsuekPEQOHMALc/U3+Ijbz7+L/IU9IWQi9jGQotQ9ziVTILMQJmgeL0RfR6tb Q/A== X-Received: from pgk38.prod.google.com ([2002:a63:a26:0:b0:c76:9c2d:449b]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:648f:b0:3ab:18cd:7da3 with SMTP id adf61e73a8af0-3b40e2c7eddmr314116637.1.1779999840003; Thu, 28 May 2026 13:24:00 -0700 (PDT) Date: Thu, 28 May 2026 20:23:48 +0000 In-Reply-To: <20260528202353.3422206-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260528202353.3422206-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260528202353.3422206-3-praan@google.com> Subject: [PATCH v5 2/7] PCI/ATS: Validate STU for VFs in pci_prepare_ats() From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava , Jason Gunthorpe Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" While every PCI Function that implements ATS has an independent ATS Extended Capability structure with a Read/Write Smallest Translation Unit (STU) field, the kernel manages SR-IOV ATS by requiring the IOMMU driver to configure the STU on the Physical Function (PF) before any any Virtual Functions (VFs) are created. Currently, pci_prepare_ats() bails out early for VFs, assuming that the PF has already been correctly prepared. However, this creates a potential mismatch if a VF is subsequently prepared with a different page shift. Update pci_prepare_ats() to validate that the requested page shift (ps) matches the STU already configured in the associated PF. This ensures early detection of incompatible configurations and maintains the kernel's policy of consistent STU sizing across all functions associated with a given SMMU. Reviewed-by: Jason Gunthorpe Reviewed-by: Samiullah Khawaja Reviewed-by: Nicolin Chen Signed-off-by: Pranjal Shrivastava Reviewed-by: Lu Baolu --- drivers/pci/ats.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index 679a3c3c1d54..8057c24b0469 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -73,8 +73,13 @@ int pci_prepare_ats(struct pci_dev *dev, int ps) if (ps < PCI_ATS_MIN_STU) return -EINVAL; =20 - if (dev->is_virtfn) + if (dev->is_virtfn) { + struct pci_dev *pdev =3D pci_physfn(dev); + + if (pdev->ats_stu !=3D ps) + return -EINVAL; return 0; + } =20 dev->ats_stu =3D ps; ctrl =3D PCI_ATS_CTRL_STU(dev->ats_stu - PCI_ATS_MIN_STU); --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 14:35:32 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 022AB331221 for ; Thu, 28 May 2026 20:24:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999844; cv=none; b=tXLZxrXE+VMPy5tOEgcrh+kUxtOqJ5INL2cwyoX77pmd9n3m7IY/1wvOHPkXLtVGlpNrBKVbxxY5b5+bjzGMQYXpL4ULAqEb6UA7d5sln2JWnxb4+V+E8JJ7s9Ok2xybal84ibaGGNcNLIghDlAutPIq0DxBHh2E0wUcAKswPeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999844; c=relaxed/simple; bh=EnNz1gQUCzAadvQoxG6N8mxuCZNBo1KHJ3OP2DBjMlY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KcC3NHeY4sNMaLhGLe5xYdp88987yasx3b0N7ENF2Y7kNi0PkqE2YHeSjNmTPl6GlAN06CPsuxigr3TtEONhA7BeLMnWSmN8JlBbWhaEFFOldbMuyTNwQiWlLYsN5ken8+LVhvRprNSl19letDvzrpMQ4FRC8XBuyaY3bvCOyIY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Uo5Vb4LQ; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Uo5Vb4LQ" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2b458add85aso146109575ad.2 for ; Thu, 28 May 2026 13:24:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779999842; x=1780604642; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xF2OaZLydlq8fssyfbqW+m3pz8p9r7jLJNQQhoc0Wjc=; b=Uo5Vb4LQUywxcUlWzfBQVUqhlihinHwj6Vu8jXlrKOYvdJeePR3BN2++q6khExbEOm vi2rWLg+8U1EBh6Phij9NQPNUP1G2iCwdENQMLzmUJ4L/ASwefeENaa0js0xUNc+DKKE CEv35qsPGmo0EZPFg4JkttikCxdBIU7lxEcv9tbbQnAR2IoVo5+0qvZNsbMt2L9z6F9z EnHenla9uGsU1TlX7ri5g0y5WIR3FG1wzsKE0nU3HAiFGPYqAdN9o9/Xrj5ZHRgq+6Df vCiroi4w6+7XymUSgLMM0CWlUcncDG3+cc77bET7snHCtrHwD87xBAmoQ+yoP+mjMd6b HGzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779999842; x=1780604642; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xF2OaZLydlq8fssyfbqW+m3pz8p9r7jLJNQQhoc0Wjc=; b=dlisNE0J2KoVmE3gL48HgPmSWigKOeGvM/XIKwToagbbGBEVj5Z/qFWBCmWsmlZ1qy yyidP8RucRm+JSvRZWtwr2soGqC6EsQvknglJtWJexAxX9fIaA75k9Yeaknk4gZRleRF FWD/KpUd890p7SjrDEDGVxnSEa5ElP3VjBiSkaaYaYjsXJEvVwC/xZ7a8efSTmamfO9J VW4x+1UKbeaZjfZSQp6oHBWW0VmPNlw0unysIcq+SI2XHMw+odJ+xMML543wWIRCmCh3 1ey5kIeOMOPMSeJSY2owrn05UoYvdG2l5Pmq+SMB2Ax5dN93Z6JJOr/dGZyBvEAhbYs+ Rihw== X-Forwarded-Encrypted: i=1; AFNElJ9VirRTEo32IzXrVA3rnO36K7XDACspg8UHVcgev/l6kkHa76LtuKe3H+ZcRZAyDqBhVYr69C26Qq8D7RU=@vger.kernel.org X-Gm-Message-State: AOJu0YyeuYBATiLRn89T1i45WgJz1xMRT+n5ZhGZnPuVtHxCO7UlBift iciRx9Lqr0mvCFhk/8GfQ2oJycCfP6mYVxNDSIqr213dciKbdShAMFQLuBFffTHI3l4SmPuvTKe v7Q== X-Received: from plhe2.prod.google.com ([2002:a17:903:1c2:b0:2ae:5d79:a153]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f601:b0:2b4:696b:7bb7 with SMTP id d9443c01a7336-2bf1eb7c31cmr3931325ad.15.1779999841997; Thu, 28 May 2026 13:24:01 -0700 (PDT) Date: Thu, 28 May 2026 20:23:49 +0000 In-Reply-To: <20260528202353.3422206-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260528202353.3422206-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260528202353.3422206-4-praan@google.com> Subject: [PATCH v5 3/7] PCI/ATS: Decouple pci_ats_supported() from pci_prepare_ats() From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, pci_prepare_ats() internally calls pci_ats_supported() and returns -EINVAL if the device does not support ATS. While this provides a safety check, it conflates support detection with configuration. Update pci_prepare_ats() to remove the internal support check. This decouples support verification from the configuration phase, ensuring that drivers can distinguish between a device that does not support ATS and one that has a true configuration error (e.g. STU mismatch). Update the function documentation to mandate that callers must verify ATS support (via pci_ats_supported()) before calling pci_prepare_ats(). Signed-off-by: Pranjal Shrivastava --- drivers/pci/ats.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index 8057c24b0469..92c2a6bc2dcc 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -56,7 +56,9 @@ EXPORT_SYMBOL_GPL(pci_ats_supported); * @ps: the IOMMU page shift * * This must be done by the IOMMU driver on the PF before any VFs are crea= ted to - * ensure that the VF can have ATS enabled. + * ensure that the VF can have ATS enabled. Callers must verify that ATS is + * supported by the device (e.g. via pci_ats_supported()) before calling t= his + * function. * * Returns 0 on success, or negative on failure. */ @@ -64,9 +66,6 @@ int pci_prepare_ats(struct pci_dev *dev, int ps) { u16 ctrl; =20 - if (!pci_ats_supported(dev)) - return -EINVAL; - if (WARN_ON(dev->ats_enabled)) return -EBUSY; =20 --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 14:35:32 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF80C332909 for ; Thu, 28 May 2026 20:24:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999846; cv=none; b=Hyiby621uDFM/wUXEJ743rTXjbZNAdbCX3meiIZMqzmtjreOvGsSbXUw9GVCutNUdxLmdYbtfA7jHEaStf9btXYHoweZLSo4lA/FO8imIhBWsFYQO604Q41LbHsUhJAhSQQwx7Y3RYXoikAm+8lA75pFzPVvbowF2xeMMKGh5YI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999846; c=relaxed/simple; bh=C32dPM3NWhfYHk+PhOeUKOa0PbpNAjRjIDRpztej9Bs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=F8Xkj5Wu+kVtfdjefSnk/ZiDbSyW5q7GWaDFVpJi5cVAo/OaGTi9Kx6kyGdWch80fdMzRCxq05POv+XEPVOws2ouGSGBeS1mpFrwecj2PA29IeP8WLVV9ZC38g8qd5neDcGLjMAaMQ+i9cX7FQWXp4m3rVZvTP71fmZS79/kI+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YnxLv+wo; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YnxLv+wo" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bd04e4fe3dso96900255ad.3 for ; Thu, 28 May 2026 13:24:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779999844; x=1780604644; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=8knH7UioVOHGAK4eKxBC8130k96uQrzRV3kgHSLvOkg=; b=YnxLv+wo9iCvO+/YDwcFTULICS83FyBAw9bYJu2O9SNX/1tJKTy0dPwKBQDijIqyvg id6lfKSt0qBmF4xutQ0PKxe7W3Gp7CsdiXd/vsccYKvEiBZLEX+V10q+6XXyeO7EBsdQ 7fsIYwXcZ5FS0Q/9ADGHL5EI2CSACfcFprNSNy10Paf8T5Us8XzVfl0QI0dmP5gtQjiD 8bUQ3cdKuApUwmhpJehxeWMd6W+HZLFhhoPfvuuz4tMMo857JTeGgEOrpX6U+J6ZbHil Bcal/EUEpwijNf/xKynHJuYgG09M41PGhwzGKRTZZto0ZztOSy1VanH65boxoHhalCXv awrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779999844; x=1780604644; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8knH7UioVOHGAK4eKxBC8130k96uQrzRV3kgHSLvOkg=; b=lU8bCxIua45a0Qd0OqR1jh+1uwh2pTbv+fh4LKxD5PYh/0lgdZ8O10Z7CcaaU+E+7x EQkf7UzNuQUL6PAGzXsLaHAsGsSTcKRLZRsj6lROGumbM4EtDSF8POFViHLxezwSkaD/ e/xOMGT/uIYHGdw0FYNGhO+dToYHb2u60pH7oss2OUX5cRIaQXKo2w4+ciAdwSGOCtJa /oQMpMOvdSb8Kwdc9V/8sJg/U4Cz82V6dIkqOsDFzrGij4/cUBE2zLPFqzoROwdQ0WRQ rcwJUr3JKpylqpOgeASZ2yOyzgYdR6AXzVIYlXN/nRhlcYEpFtLkoCuaEW2xFFQHZRXX Qsow== X-Forwarded-Encrypted: i=1; AFNElJ/GB3h4bDwvXI6A2dcLjSVv2rLldsrdU4OLrQb3mrQHmnTcliq45LBkSxhF+w85o0hFeNQ9My8lxMwGExE=@vger.kernel.org X-Gm-Message-State: AOJu0Yzme/5qwMxGA2DSWM6/Bs+flKLZ1EcSyd91qfHBYwxJzIPUdhCm 698/xZJ53QQzf2sD8FutDYFmDivK/8dnPa8KQknzNyjkhfkiN462a3W6/ze/e8F78J7HUWIScW5 iBw== X-Received: from plxm11.prod.google.com ([2002:a17:902:db0b:b0:2bf:1b22:9616]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1ae3:b0:2ba:6ca2:bca with SMTP id d9443c01a7336-2bf1eb9710amr3927415ad.26.1779999844039; Thu, 28 May 2026 13:24:04 -0700 (PDT) Date: Thu, 28 May 2026 20:23:50 +0000 In-Reply-To: <20260528202353.3422206-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260528202353.3422206-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260528202353.3422206-5-praan@google.com> Subject: [PATCH v5 4/7] iommu/arm-smmu-v3: Standardize ATS enablement failure reporting From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The SMMUv3 driver currently has a two-phase commit in its ATS enablement flow. During arm_smmu_attach_prepare(), it predicts whether ATS will be enabled using arm_smmu_ats_supported() and accordingly increments nr_ats_masters and merges ATS invalidations into the domain's invs array. However, the actual hardware enablement via pci_enable_ats() happens later in arm_smmu_attach_commit(). If this call to pci_enable_ats fails, the SMMU driver's ATS state tracking remains polluted, i.e., the driver tracks ATS as enabled on a master that is not actually using it. This leads to an incorrect nr_ats_masters and triggers a warning in the PCI core during detach: 1 [ 127.925080] ------------[ cut here ]------------ 2 [ 127.925084] WARNING: drivers/pci/ats.c:132 at pci_disable_ats+0x94/0x= a8 3 ... 4 [ 128.068169] Call trace: 5 [ 128.070603] pci_disable_ats+0x94/0xa8 (P) 6 [ 128.074688] arm_smmu_attach_prepare+0x104/0x310 7 [ 128.079292] arm_smmu_attach_dev_ste+0x128/0x1e0 The issue was exposed under heavy load when running a VFIO-based DMA map stress test (iova_stress). Following the addition of the arm_smmu_master_prepare_ats() [1] helper duri= ng device probe, failable ATS configuration (STU setup) is now handled early during probe. This ensures that any master reaching the attach phase is guaranteed to have a valid ATS configuration. Update arm_smmu_enable_ats() to use the WARN() macro for any subsequent enablement failures during the commit phase. Since probe checks now preclude software configuration errors, any failure here is considered a kernel bug. [1] https://lore.kernel.org/all/cover.1779392420.git.nicolinc@nvidia.com/ Signed-off-by: Pranjal Shrivastava --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 a10affb483a4..aaebd72bc48d 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -2956,8 +2956,14 @@ static void arm_smmu_enable_ats(struct arm_smmu_mast= er *master) * ATC invalidation of PASID 0 causes the entire ATC to be flushed. */ arm_smmu_atc_inv_master(master, IOMMU_NO_PASID); - if (pci_enable_ats(pdev, stu)) - dev_err(master->dev, "Failed to enable ATS (STU %zu)\n", stu); + + /* + * Any failure at this point is a kernel bug. pci_ats_supported() + * and pci_prepare_ats() have already verified the hardware capability + * and programmed the STU. Thus, pci_enable_ats() should not fail here. + */ + WARN(pci_enable_ats(pdev, stu), + "Failed to enable ATS (STU %zu)\n", stu); } =20 static int arm_smmu_enable_pasid(struct arm_smmu_master *master) --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 14:35:32 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D00CA35CB8C for ; Thu, 28 May 2026 20:24:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999848; cv=none; b=Tongs/YY86CUu57qcwA/oE6PSmk6c2dyE5MnwCqEHYa7A2F6I4MVAUoN7+e3ktzXo6ZkgLJVyUcvfqXpoopmKudDmLhdh19S+t0+OczKsH9Cy9lxMcSJ/Mvd7Edy7GzElT2uooLrBpsF9f2m7qmk4fR7sSMYPb9LXHiKJH+8RKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999848; c=relaxed/simple; bh=VfVdmXQxQXa/JgZYgCma2WxLIqTFBKl4v9hiZjMAj/o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HYM3wok5U1bH5u+LACHgFMjqY2kyYVmtJHk+svQLhyjj4c6/c8VEI7d2xgaYw7x3PqpKBBaFmVDctOKW+v40LNMKoamlZJrSA070Fw4nDEqz+4jeAeXyjrY3IrH6tClK4xTu8kga6piS+3YHli9RlvS7hXVEfLoh4oxNWhevw9I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=fs68YwEV; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fs68YwEV" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-c828659ecd4so5957428a12.0 for ; Thu, 28 May 2026 13:24:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779999846; x=1780604646; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=OQXNgdZN3cKQ+g08vXrIsLwNysE31EdhoJp0+kzR5Os=; b=fs68YwEVHAkWRlDyxr/2Udxv0x4gbiYQ1zQHW+x+/hMeVWwCS9DCA3oA4Dx3qxyTDL Xp2FO6f3h31vrZgteBxxEK+flNziqq/InKuV+w+YyXM0srA585jVbUSnA258Lctt00zN GpZIvvhSefoVR2TGBNnm+mPFma0AMkJ7L08nct3JbYn4sDI+Y1lgpEyde/fO6CWhjByZ 4uujhSblA/FMTshp0rOB5MpRwe0Fb4PSIJcv6rkRCkTVoqOmrx9aJX+f+1DShDoj4ub0 30444QJtmHXNathTXPizlZU/bIjb+Ah5b0e8JiT7UHf51B7lZ3d+KN9u1+pe8Ecqyb94 2nZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779999846; x=1780604646; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OQXNgdZN3cKQ+g08vXrIsLwNysE31EdhoJp0+kzR5Os=; b=LEteZSFl6ugX8Wy2syTLz5oPvSymPU90Or+isk5m3ANZrH13pSm5kSyW0cjT654OVs 5dcyUf03NFQdC8mnHUIBXSt6EjyKlSRg9hwY5uXxCILZii1UXX/nY43utrZynxnjeeVz rmUFB33vPwoJHAA2LXpiGJI5pYpgZwuBe61mmJmK5CkCxgmT7yMAmruIfAhwxR90r0+i kj0/21oeYSe9Cld8IuBF57E3wkT94qANaiSac8c5ILlkNnwddoJjFmfNCbwlnm4fsCGb G4DWgAW4Z7v3HkR5hPcvWv6NpQOIGgx+Z896/ZkV8OsS6oAOw6Cemin+hAjc11DVkZ1G S9Aw== X-Forwarded-Encrypted: i=1; AFNElJ9fgEFrDWidbEL0RAm1xzz3UcZ+WBu0wiq1XmG0e/SQnnINLxowLbKHtABQoJ1L/H6gUAl3kRixe6N6qlk=@vger.kernel.org X-Gm-Message-State: AOJu0YyQePT0nuf5V9R1STTeoFeu0a66Mzi/2hqs9iikBTU7PHIIHU5b Khw3zFKi1Gvc50+COvEJ+XYiSzq26TNWRTyo87JI5K32IS5ApPiTmwLkfRFgkeByu5KaVU7Lt98 bag== X-Received: from pgce23.prod.google.com ([2002:a05:6a02:1d7:b0:c85:104d:a751]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:7a9c:b0:3b3:9815:3e8f with SMTP id adf61e73a8af0-3b40e578036mr320728637.24.1779999845986; Thu, 28 May 2026 13:24:05 -0700 (PDT) Date: Thu, 28 May 2026 20:23:51 +0000 In-Reply-To: <20260528202353.3422206-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260528202353.3422206-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260528202353.3422206-6-praan@google.com> Subject: [PATCH v5 5/7] iommu/vt-d: Fix RB-tree corruption and Use-After-Free in probe From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava , sashiko-bot@kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The intel_iommu_probe_device() function contains two pre-existing memory safety issues on its error path: 1. The info->node RB-tree member is zero-initialized via kzalloc. If a device does not support ATS, the device_rbtree_insert() call is skipped. If a subsequent probe step fails, the error path jumps to device_rbtree_remove(), which misinterprets the zeroed node as a tree root and corrupts the device RB-tree. 2. The info structure is freed on failure, but the pointer remains linked to the device via dev_iommu_priv_set(). This leads to a Use-After-Free regression if the pointer is accessed later. Fix these by explicitly initializing the RB-node as empty and guarding its removal. Additionally, ensure dev_iommu_priv_set(dev, NULL) is called before freeing the info structure in the error path. Reported-by: sashiko-bot@kernel.org Closes: https://lore.kernel.org/all/20260525205628.CD4431F000E9@smtp.kernel= .org/ Suggested-by: Baolu Lu Signed-off-by: Pranjal Shrivastava --- drivers/iommu/intel/iommu.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 4d0e65bc131d..ed6d3a0203f5 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -157,7 +157,10 @@ static void device_rbtree_remove(struct device_domain_= info *info) unsigned long flags; =20 spin_lock_irqsave(&iommu->device_rbtree_lock, flags); - rb_erase(&info->node, &iommu->device_rbtree); + if (!RB_EMPTY_NODE(&info->node)) { + rb_erase(&info->node, &iommu->device_rbtree); + RB_CLEAR_NODE(&info->node); + } spin_unlock_irqrestore(&iommu->device_rbtree_lock, flags); } =20 @@ -3254,6 +3257,7 @@ static struct iommu_device *intel_iommu_probe_device(= struct device *dev) =20 info->dev =3D dev; info->iommu =3D iommu; + RB_CLEAR_NODE(&info->node); if (dev_is_pci(dev)) { if (ecap_dev_iotlb_support(iommu->ecap) && pci_ats_supported(pdev) && @@ -3316,6 +3320,7 @@ static struct iommu_device *intel_iommu_probe_device(= struct device *dev) clear_rbtree: device_rbtree_remove(info); free: + dev_iommu_priv_set(dev, NULL); kfree(info); =20 return ERR_PTR(ret); --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 14:35:32 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC13135E1A9 for ; Thu, 28 May 2026 20:24:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999850; cv=none; b=sl665iJwqwfNxfH3PHJXU6dIVC6hB++5752gFEBvLvCqI+XYy2FxKuHtsztzdrUb5d5UfGQ5msYzBBf5FrnfvdvytR2r70YHTBSm8M8Bhcimc1QxqySA3a5n5t01CGwf4kkERoE+VrZhzP3+f6fMHDuc2mUMppsHZcMTYX6VzJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999850; c=relaxed/simple; bh=ylHhsRCHAqSMh1pS6GMlC808waOAu3ILm6CtLVqC5hg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=AhCtxQs0T7Yyqmf9dE+oKms7XJhnSUuOWIQbXcJ9ovAK5szcQ0Fdczl0NXvD34OQUEDjLcpNuI8HeDgxcfcyb2psHKMt9wIfAFfXmpx66Y7Z5Xz/fxOTS2qRmYpgUQgAI4ZQ2OSyBHK3JDJ8nhp/Bgpr34kRx0sb/fddrcbAJjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=tmLE3FNf; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="tmLE3FNf" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2babbeff9e4so146141905ad.0 for ; Thu, 28 May 2026 13:24:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779999848; x=1780604648; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Q7UJLNVkpdPww3mteKfmSVmHt+OJdAAQ7hsDxELrWtY=; b=tmLE3FNfR90yjcBQHC+yvKwkbgPdmJCNWlL0dymh+Hr2QCf1obCTMSzAKmtRCK+Dx9 FPCIXWg8iJTzu+gM2VXNQ7MzsNvlDTYTJH5+wQdEEazEpU8EMGlK/y7+G5ZJ8/qX8ig/ y1BkaL5VU9esPPViojFEsLh4pnQ2YqDFbV3t6Pd6GAjPlIckYOjSckrgOW1jrZcsfd3e yeMs57bTZzG7uI9jWtWqH3JmqdK9Q8dFHmNDDA2KIiKUwcVRRGGrPHhYAA5GgIfR4pAd wKyURDAbxI1PtpSvDFts3sKSkFR50HUABr1FSPig8+ZAnvYZ2iQ9H9Q5i/ZwhlNUX8/E 3EGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779999848; x=1780604648; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Q7UJLNVkpdPww3mteKfmSVmHt+OJdAAQ7hsDxELrWtY=; b=U48EJNYLZ7O+hztTsE4TuxEn9awoWLEXX8ExCO5oaNz++VP+e+0kazXh8MNAMKyB+d EjjBcwIc0/GzJORNZZKERCbF+F+RVzL1HjqVnGmwWDiUHnPs0W4alyNg6k5e7xTeQr3n EwEwKLWSKnM30+X+BvUc8okxdhtMOKl2yBQu10TSoWY3PQS8gsyPhZhR1O5SVjJcttyl QEZiwjDqDaU7zfv+iK5Ls9/0lM3oWsVxy63qbW8ZgQx/ZYeCTcqj+9MuhfaO+sEASazd rRjYsOUGy7zf2ZddYE5MYgbsoJBSkmn0Eg0KyzxFlHXm9EwvvVZL1/WDoP6xDGPORufr LH/Q== X-Forwarded-Encrypted: i=1; AFNElJ9HguEzO9qTxVoUFkDTUMNYPPJLto0BChDjNxxxoUKCR05BqdKmDt12hvRfHvwnwChbM/sV2Do66TBS3l4=@vger.kernel.org X-Gm-Message-State: AOJu0Yyp85iQz3Xm2gQnn3tTvEDkOh4H/pklWVuRE115+UkokFR3ew1c aQlx7eofwtkL/FbLrrNkkGGQfjJAzI4+AkH8Puu/HMCXvk7rt4nAqhxiJSBoq4yHWH1Mukjp6zF 7qQ== X-Received: from pllh12.prod.google.com ([2002:a17:902:748c:b0:2bf:8c:2de]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:fa3:b0:2bc:8e7d:3dce with SMTP id d9443c01a7336-2bf1ffee251mr1653365ad.27.1779999847992; Thu, 28 May 2026 13:24:07 -0700 (PDT) Date: Thu, 28 May 2026 20:23:52 +0000 In-Reply-To: <20260528202353.3422206-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260528202353.3422206-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260528202353.3422206-7-praan@google.com> Subject: [PATCH v5 6/7] iommu/vt-d: Fail probe on ATS configuration failure From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update the Intel VT-d driver to handle ATS configuration and enablement more strictly. Specifically, update the device probe to fail if pci_prepare_ats() returns an error. This ensures that any ATS-capable master reaching the attach phase is guaranteed to have a valid config. Additionally, update iommu_enable_pci_ats() to WARN() if pci_enable_ats fails. Since earlier checks in the probe phase preclude config-related failures, any failure during hardware enablement is considered a kernel bug. Signed-off-by: Pranjal Shrivastava --- drivers/iommu/intel/iommu.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index ed6d3a0203f5..f13da16717fe 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -876,8 +876,14 @@ static void iommu_enable_pci_ats(struct device_domain_= info *info) if (!pci_ats_page_aligned(pdev)) return; =20 - if (!pci_enable_ats(pdev, VTD_PAGE_SHIFT)) - info->ats_enabled =3D 1; + /* + * pci_enable_ats() should not fail here because earlier checks + * have already verified support and configuration. + */ + if (WARN_ON(pci_enable_ats(pdev, VTD_PAGE_SHIFT))) + return; + + info->ats_enabled =3D 1; } =20 static void iommu_disable_pci_ats(struct device_domain_info *info) @@ -3292,7 +3298,10 @@ static struct iommu_device *intel_iommu_probe_device= (struct device *dev) =20 dev_iommu_priv_set(dev, info); if (pdev && pci_ats_supported(pdev)) { - pci_prepare_ats(pdev, VTD_PAGE_SHIFT); + ret =3D pci_prepare_ats(pdev, VTD_PAGE_SHIFT); + if (ret) + goto free; + ret =3D device_rbtree_insert(iommu, info); if (ret) goto free; --=20 2.54.0.823.g6e5bcc1fc9-goog From nobody Mon Jun 8 14:35:32 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7CF135E1AD for ; Thu, 28 May 2026 20:24:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999852; cv=none; b=UEdI1MhowLbOtMzSkoW60SgC4hQCwg28zSqFYodReMIHuRVHprw7xYP87M5UrIAVSnZU3QzZtpr6V+9zKihJOVJ1ZI49qiZpl8tcj6k2wd030ZPXW8gafix0kFimmk4sm0VJtItZKk/HuijaQFDkTOax50tmcdb1VpXbtPPZFbg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779999852; c=relaxed/simple; bh=rCPBs6VpzFnSeGV1IQONO9sqLS2eG7RrmNxYtsUNeyw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=c9KaQ2mwoFeyIVu52OqNvoH4v1cRxocIQzkF9YBNxuy3PZS8WYzHBRNaslRLrG5/LJqnWYoX2gaLtC1E64YaG55KNC94Uwd2EJyqXTx3xp+Gn0ZCu+SShPwSbHaDuYdjHw4iT9aGvizRkSEm1Tugc+ffarS6gTU8GHQtGopAE90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--praan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=mHWlUVgn; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--praan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="mHWlUVgn" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-368f2d76b04so12392350a91.3 for ; Thu, 28 May 2026 13:24:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779999850; x=1780604650; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=junrNZ+TOSSnGGCt6IWg1rMtIZuzEOzNu3RMYtfyWkA=; b=mHWlUVgnf+i6tgAJL5mZDPBOwkgpBVSahNHXwBM7D5WLWK9/gZEmPiHt4nV2+S3cSR WM2826vfIgQpNCITrjF+4IPF8G+lbSeJnqCsyyG5m+UQEMRoY9s2xog5Vw2gWhizxqNP hgl+Qw0+D0T6D2eRfDyrC7tPfwUiWH7cvr5fa08ORpC+q6kS6rgL4bkcxZcEqyVNcV1U EbGWZuDWGnylPqBULLuCOIJsv+iIxjlj/8THlmfxvhf7IP23CH5vu38EmN3H7Gvi5IlX eg36xh+7azQkKWCfROcvF8bZ2NvzvTtDfuabDdKTO6fdvO5yaXnEZqH0mEHxBwyaY5az DMSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779999850; x=1780604650; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=junrNZ+TOSSnGGCt6IWg1rMtIZuzEOzNu3RMYtfyWkA=; b=B0LLVKK5wBtQ0X/ZZQuR3ejmMQOSlQ8Qc5L5lFEcGMN1wGzNdKB6bFuOBO284RtX1A TEf2o5gOL8KJPf5vVI70fPQASOb3WchjxUsG5Xzq0apiMZPtETEFCMcvk7ueNGxKl3QK C9YYza+DwmFolRrmWvG4if+ABlRToPBryrVYBLquAbgpxFPViVMIsZpa+oQQp2zuKyUZ RhpDPaS2OfHspK3yG70L39pSr3B+3Y+Vp6BN70r5Z9ChfiNzndK1JxYAAExj9YgH+9mO PUGoTr5sIcpkNmd6zoNHa6vk2V5Fcm9AILmNq9h8oQ3yF+tpfVtT4wujptYDd0FPucas t0fw== X-Forwarded-Encrypted: i=1; AFNElJ/gCjp7UN2++aDkhgT2SzU166ely7B5/vt0f7T+S0UcxtzuniDzQRGyYPup0lcdFYL63EgTjIaUyKW3t4o=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5Ky0OVkvEno16vGMVyhz9G4Jq3f1fx7DSaxuAyovTJ7m6ImL9 3y1g8gPJ1J2Zyi9DsPsOTsIKBIraKZuHJlYcubv4JOHuy0qxpmlYCEsoCFnDQqIbjT7i4uT79sF k/g== X-Received: from pjbbb14.prod.google.com ([2002:a17:90b:8e:b0:36b:bdb2:1426]) (user=praan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:586b:b0:36b:abe2:bc82 with SMTP id 98e67ed59e1d1-36bbcc16bb4mr121972a91.1.1779999850016; Thu, 28 May 2026 13:24:10 -0700 (PDT) Date: Thu, 28 May 2026 20:23:53 +0000 In-Reply-To: <20260528202353.3422206-1-praan@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260528202353.3422206-1-praan@google.com> X-Mailer: git-send-email 2.54.0.823.g6e5bcc1fc9-goog Message-ID: <20260528202353.3422206-8-praan@google.com> Subject: [PATCH v5 7/7] iommu/amd: Fail probe on ATS configuration failure From: Pranjal Shrivastava To: iommu@lists.linux.dev, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Joerg Roedel , Will Deacon , Bjorn Helgaas , David Woodhouse , Lu Baolu , Robin Murphy , Suravee Suthikulpanit , Jason Gunthorpe , Nicolin Chen , David Matlack , Samiullah Khawaja , Daniel Mentz , Pasha Tatashin , Mostafa Saleh , Pranjal Shrivastava Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update the AMD IOMMU driver to handle ATS configuration and enablement more strictly. Specifically, update the device probe to fail if pci_prepare_ats() returns an error. This ensures that any ATS-capable master reaching the attach phase is guaranteed to have a valid config. Additionally, update pdev_enable_cap_ats() to WARN_ON() if pci_enable_ats fails. Since earlier checks in the probe phase preclude config-related failures, any failure during hardware enablement is considered a kernel bug. Fix a pre-existing Use-After-Free risk by ensuring iommu_ignore_device() is called on all probe failures after iommu_init_device(). Signed-off-by: Pranjal Shrivastava --- drivers/iommu/amd/iommu.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 84cad43dc188..b74c4504bee3 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -570,10 +570,16 @@ static inline int pdev_enable_cap_ats(struct pci_dev = *pdev) if (amd_iommu_iotlb_sup && (dev_data->flags & AMD_IOMMU_DEVICE_FLAG_ATS_SUP)) { ret =3D pci_enable_ats(pdev, PAGE_SHIFT); - if (!ret) { - dev_data->ats_enabled =3D 1; - dev_data->ats_qdep =3D pci_ats_queue_depth(pdev); - } + /* + * pci_enable_ats() should not fail here because earlier checks + * have already verified support and configuration. + */ + if (WARN_ON(ret)) + return ret; + + dev_data->ats_enabled =3D 1; + dev_data->ats_qdep =3D pci_ats_queue_depth(pdev); + ret =3D 0; } =20 return ret; @@ -2502,10 +2508,22 @@ static struct iommu_device *amd_iommu_probe_device(= struct device *dev) else dev_data->max_irqs =3D MAX_IRQS_PER_TABLE_512; =20 - if (dev_is_pci(dev)) - pci_prepare_ats(to_pci_dev(dev), PAGE_SHIFT); + if (dev_is_pci(dev)) { + struct pci_dev *pdev =3D to_pci_dev(dev); + + if (pci_ats_supported(pdev)) { + ret =3D pci_prepare_ats(pdev, PAGE_SHIFT); + if (ret) { + iommu_dev =3D ERR_PTR(ret); + goto out_err; + } + } + } =20 out_err: + if (IS_ERR(iommu_dev)) + iommu_ignore_device(iommu, dev); + return iommu_dev; } =20 --=20 2.54.0.823.g6e5bcc1fc9-goog