From: Leon Romanovsky <leon@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Danilo Krummrich <dakr@kernel.org>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Johannes Berg <johannes@sipsolutions.net>,
Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Randy Dunlap <rdunlap@infradead.org>,
Bjorn Helgaas <bhelgaas@google.com>,
"Joerg Roedel (AMD)" <joro@8bytes.org>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
Vasant Hegde <vasant.hegde@amd.com>,
Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
David Woodhouse <dwmw2@infradead.org>,
Lu Baolu <baolu.lu@linux.intel.com>,
Johan Hovold <johan@kernel.org>,
Eric Dumazet <edumazet@kernel.org>,
Marcel Holtmann <marcel@holtmann.org>,
Luiz Augusto von Dentz <luiz.dentz@gmail.com>,
Nipun Gupta <nipun.gupta@amd.com>,
Nikhil Agarwal <nikhil.agarwal@amd.com>,
Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
Cc: linux-kernel@vger.kernel.org, driver-core@lists.linux.dev,
linux-input@vger.kernel.org, netdev@vger.kernel.org,
linux-wireless@vger.kernel.org, linux-usb@vger.kernel.org,
linux-bluetooth@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-doc@vger.kernel.org, linux-pci@vger.kernel.org,
iommu@lists.linux.dev, Jason Gunthorpe <jgg@ziepe.ca>
Subject: [PATCH 14/17] driver core: Add a global initial device trust policy
Date: Thu, 5 Nov 2026 13:42:27 +0200 [thread overview]
Message-ID: <20261105-device-trust-core-v1-14-1e536825b4eb@nvidia.com> (raw)
In-Reply-To: <20261105-device-trust-core-v1-0-1e536825b4eb@nvidia.com>
From: Leon Romanovsky <leonro@nvidia.com>
Confidential guests may require fresh userspace attestation before
permitting any functional driver to probe. Listing individual devices on
the command line leaves unlisted hardware free to probe, and initrd policy
writes arrive too late for built-in drivers.
A system-wide initial policy is needed to keep unlisted devices waiting
for authorization while allowing explicit exceptions for devices needed
to reach the initrd. Existing boot behavior must remain available when
no global policy is selected.
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
Documentation/ABI/testing/sysfs-devices-trust | 7 +++--
Documentation/admin-guide/kernel-parameters.txt | 23 ++++++++++++--
drivers/base/base.h | 3 ++
drivers/base/trust.c | 41 ++++++++++++++++++++-----
4 files changed, 62 insertions(+), 12 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-devices-trust b/Documentation/ABI/testing/sysfs-devices-trust
index c0ce905b625d0..6f52102a1dfbf 100644
--- a/Documentation/ABI/testing/sysfs-devices-trust
+++ b/Documentation/ABI/testing/sysfs-devices-trust
@@ -17,8 +17,11 @@ Description:
value may be selected by the bus before the device is
registered; otherwise it is "default". The policy is resolved
to an active trust level before the device is probed.
- A matching device_trust= kernel command-line entry overrides
- the initial requested policy before registration.
+ A non-default device_trust.default= kernel command-line value
+ replaces the bus policy before registration. A matching
+ device_trust= entry takes precedence over both, regardless
+ of command-line order. Boot policy also applies to new devices
+ discovered after boot.
Otherwise, device_trust.driver= can initialize policy on the
first binding attempt with a matching driver rule. A successful
policy write, including the existing value, suppresses this
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index b1d6999a5befa..458f59a8af854 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1267,9 +1267,8 @@ Kernel parameters
/sys/bus/<bus>/devices/<device>. The first colon separates
the bus name; further colons belong to the device name.
Policies are default, disabled, adversary, and full.
- Entries override bus-initialized requested policy;
- unlisted devices retain their existing policy.
- Per-device entries take precedence over device_trust.driver.
+ Entries override device_trust.default, device_trust.driver,
+ and bus-initialized policy, regardless of option order.
The last entry for a device wins. If specified more than
once, the last valid list replaces all earlier lists.
Malformed lists are warned about and ignored in full.
@@ -1285,6 +1284,24 @@ Kernel parameters
device_trust=pci:0000:01:00.0=adversary,pci:0000:02:00.0=disabled
See Documentation/driver-api/driver-model/device-trust.rst.
+ device_trust.default=
+ [KNL] Set initial trust policy for devices without a
+ matching device_trust= entry, including hotplugged devices.
+ A matching device_trust.driver= rule can replace this
+ initial policy at the first binding attempt.
+ Format: { default | disabled | adversary | full }
+ default preserves bus-initialized policy (the default).
+ Other values override bus-initialized policy before
+ probing, including for built-in drivers.
+ The last valid value wins; invalid values are warned
+ about and ignored.
+ Without a matching driver rule, disabled prevents binding
+ until userspace authorizes each device by writing adversary
+ or full to trust_policy. Boot-critical devices need explicit
+ device or driver rules to operate before userspace. DMA
+ containment remains a bus and IOMMU responsibility.
+ See Documentation/driver-api/driver-model/device-trust.rst.
+
device_trust.driver=
[KNL] Set initial device trust policy by driver name,
including for drivers built into the kernel.
diff --git a/drivers/base/base.h b/drivers/base/base.h
index dd78857abf74f..5ff3217eb916e 100644
--- a/drivers/base/base.h
+++ b/drivers/base/base.h
@@ -193,6 +193,9 @@ bool device_trust_claim_allowed(const struct device *dev,
const struct device_driver *drv,
const char *device_options,
const char *driver_options);
+void device_trust_apply_boot_policy(struct device *dev,
+ enum device_trust_policy policy,
+ const char *options);
#endif
/* All active trust level transitions are serialized by the device lock. */
diff --git a/drivers/base/trust.c b/drivers/base/trust.c
index 4bcda888591a5..c2463b51c3a03 100644
--- a/drivers/base/trust.c
+++ b/drivers/base/trust.c
@@ -249,6 +249,7 @@ const struct attribute_group device_trust_attr_group = {
static const char *device_trust_cmdline __ro_after_init;
static const char *device_trust_driver_cmdline __ro_after_init;
+static enum device_trust_policy device_trust_default_policy __ro_after_init;
static int device_trust_parse_policy(const char *options, const char *target_bus,
const char *target_name,
@@ -410,18 +411,44 @@ static int __init device_trust_driver_setup(char *str)
}
__setup("device_trust.driver=", device_trust_driver_setup);
+static int __init device_trust_default_setup(char *str)
+{
+ int policy = match_string(device_trust_policy_names,
+ ARRAY_SIZE(device_trust_policy_names), str);
+
+ if (policy < 0) {
+ pr_warn("device_trust: ignoring invalid default policy '%s'\n", str);
+ return 1;
+ }
+
+ device_trust_default_policy = policy;
+ return 1;
+}
+__setup("device_trust.default=", device_trust_default_setup);
+
+VISIBLE_IF_KUNIT void device_trust_apply_boot_policy(struct device *dev,
+ enum device_trust_policy policy,
+ const char *options)
+{
+ if (dev->p && dev->p->trust_initialized)
+ return;
+
+ if (policy != DEVICE_TRUST_POLICY_DEFAULT)
+ dev->trust_policy = policy;
+ if (options &&
+ device_trust_parse_cmdline(options, dev, &dev->trust_policy) > 0 &&
+ dev->p)
+ dev->p->trust_policy_override = true;
+}
+EXPORT_SYMBOL_IF_KUNIT(device_trust_apply_boot_policy);
+
/**
* device_trust_init - Apply boot policy before registration or bus policy use
* @dev: unregistered device with its bus, name, and default policy set
*/
void device_trust_init(struct device *dev)
{
- if (dev->p && dev->p->trust_initialized)
- return;
-
- if (device_trust_cmdline &&
- device_trust_parse_cmdline(device_trust_cmdline, dev,
- &dev->trust_policy) > 0 && dev->p)
- dev->p->trust_policy_override = true;
+ device_trust_apply_boot_policy(dev, device_trust_default_policy,
+ device_trust_cmdline);
}
EXPORT_SYMBOL_GPL(device_trust_init);
--
2.56.0
next prev parent reply other threads:[~2026-11-05 11:43 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 11:42 [PATCH 00/17] driver core: Authorize device trust before driver binding Leon Romanovsky
2026-11-05 11:42 ` [PATCH 01/17] Input: gameport - attach manual drivers through the driver core Leon Romanovsky
2026-11-05 11:42 ` [PATCH 02/17] Input: serio " Leon Romanovsky
2026-11-05 17:05 ` Dmitry Torokhov
2026-11-05 11:42 ` [PATCH 03/17] net: phy: Attach generic PHY " Leon Romanovsky
2026-11-05 14:50 ` Andrew Lunn
2026-11-05 18:35 ` Leon Romanovsky
2026-11-05 15:33 ` Andrew Lunn
2026-11-05 18:45 ` Leon Romanovsky
2026-11-05 11:42 ` [PATCH 04/17] wifi: mac80211_hwsim: lock device for manual driver binding Leon Romanovsky
2026-11-05 11:42 ` [PATCH 05/17] USB: Lock registered interfaces during " Leon Romanovsky
2026-11-05 17:24 ` Alan Stern
2026-11-05 18:44 ` Leon Romanovsky
2026-11-05 11:42 ` [PATCH 06/17] PNP: Attach card devices through the driver core Leon Romanovsky
2026-11-05 11:42 ` [PATCH 07/17] cdx: Propagate DMA configuration errors Leon Romanovsky
2026-11-05 11:42 ` [PATCH 08/17] driver core: Allow userspace to detect EPROBE_DEFER when using sysfs drivers_probe Leon Romanovsky
2026-11-05 11:42 ` [PATCH 09/17] driver core: Introduce a generic device trust level Leon Romanovsky
2026-11-05 11:42 ` [PATCH 10/17] driver core: Expose device trust authorization through sysfs Leon Romanovsky
2026-11-05 13:10 ` Greg Kroah-Hartman
2026-11-05 13:27 ` Leon Romanovsky
2026-11-05 13:40 ` Greg Kroah-Hartman
2026-11-05 13:59 ` Robin Murphy
2026-11-05 14:03 ` Greg Kroah-Hartman
2026-11-05 14:17 ` Leon Romanovsky
2026-11-05 14:26 ` Robin Murphy
2026-11-05 15:45 ` Greg Kroah-Hartman
2026-11-05 14:06 ` Jason Gunthorpe
2026-11-05 14:43 ` Andrew Lunn
2026-11-05 14:59 ` Jason Gunthorpe
2026-11-05 15:09 ` Robin Murphy
2026-11-05 13:42 ` Robin Murphy
2026-11-05 17:02 ` Jason Gunthorpe
2026-11-05 11:42 ` [PATCH 11/17] driver core: Accept device trust policy on the kernel command line Leon Romanovsky
2026-11-05 11:42 ` [PATCH 12/17] driver core: Accept device trust policy by driver name Leon Romanovsky
2026-11-05 11:42 ` [PATCH 13/17] driver core: Preserve trust commitment beyond driver binding Leon Romanovsky
2026-11-05 11:42 ` Leon Romanovsky [this message]
2026-11-05 11:42 ` [PATCH 15/17] driver core: Cover trust authorization and binding with KUnit Leon Romanovsky
2026-11-05 11:42 ` [PATCH 16/17] driver core: Document trust admission and initrd authorization Leon Romanovsky
2026-11-05 11:42 ` [PATCH 17/17] PCI: Replace untrusted state with device trust Leon Romanovsky
2026-11-05 13:12 ` Greg Kroah-Hartman
2026-11-05 13:18 ` Leon Romanovsky
2026-11-05 13:26 ` Greg Kroah-Hartman
2026-11-05 14:03 ` Jason Gunthorpe
2026-11-05 15:43 ` Greg Kroah-Hartman
2026-11-05 16:26 ` Jason Gunthorpe
2026-11-05 18:26 ` Leon Romanovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261105-device-trust-core-v1-14-1e536825b4eb@nvidia.com \
--to=leon@kernel.org \
--cc=andrew@lunn.ch \
--cc=baolu.lu@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=corbet@lwn.net \
--cc=dakr@kernel.org \
--cc=davem@davemloft.net \
--cc=dmitry.torokhov@gmail.com \
--cc=driver-core@lists.linux.dev \
--cc=dwmw2@infradead.org \
--cc=edumazet@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hkallweit1@gmail.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@ziepe.ca \
--cc=johan@kernel.org \
--cc=johannes@sipsolutions.net \
--cc=joro@8bytes.org \
--cc=kuba@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=luiz.dentz@gmail.com \
--cc=marcel@holtmann.org \
--cc=netdev@vger.kernel.org \
--cc=nikhil.agarwal@amd.com \
--cc=nipun.gupta@amd.com \
--cc=pabeni@redhat.com \
--cc=pieter.jansen-van-vuuren@amd.com \
--cc=rafael@kernel.org \
--cc=rdunlap@infradead.org \
--cc=robin.murphy@arm.com \
--cc=skhan@linuxfoundation.org \
--cc=suravee.suthikulpanit@amd.com \
--cc=vasant.hegde@amd.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®