mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Lenovo are adding support for both Admin and System certificates to the certificate based authentication feature This commit adds the support for this. Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca> Link: https://lore.kernel.org/r/20241024195536.6992-4-mpearson-lenovo@squebb.ca [ij: Added #include <linux/array_size.h> + comment grammar fix] Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
		
			
				
	
	
		
			494 lines
		
	
	
	
		
			17 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			494 lines
		
	
	
	
		
			17 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
What:		/sys/class/firmware-attributes/*/attributes/*/
 | 
						|
Date:		February 2021
 | 
						|
KernelVersion:	5.11
 | 
						|
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
 | 
						|
		Prasanth KSR <prasanth.ksr@dell.com>
 | 
						|
		Dell.Client.Kernel@dell.com
 | 
						|
Description:
 | 
						|
		A sysfs interface for systems management software to enable
 | 
						|
		configuration capability on supported systems.  This directory
 | 
						|
		exposes interfaces for interacting with configuration options.
 | 
						|
 | 
						|
		Unless otherwise specified in an attribute description all attributes are optional
 | 
						|
		and will accept UTF-8 input.
 | 
						|
 | 
						|
		type:
 | 
						|
		    A file that can be read to obtain the type of attribute.
 | 
						|
		    This attribute is mandatory.
 | 
						|
 | 
						|
		The following are known types:
 | 
						|
 | 
						|
			- enumeration: a set of pre-defined valid values
 | 
						|
			- integer: a range of numerical values
 | 
						|
			- string
 | 
						|
 | 
						|
		HP specific types
 | 
						|
		-----------------
 | 
						|
			- ordered-list - a set of ordered list valid values
 | 
						|
 | 
						|
 | 
						|
		All attribute types support the following values:
 | 
						|
 | 
						|
		current_value:
 | 
						|
				A file that can be read to obtain the current
 | 
						|
				value of the <attr>.
 | 
						|
 | 
						|
				This file can also be written to in order to update the value of a
 | 
						|
				<attr>
 | 
						|
 | 
						|
				This attribute is mandatory.
 | 
						|
 | 
						|
		default_value:
 | 
						|
				A file that can be read to obtain the default
 | 
						|
				value of the <attr>
 | 
						|
 | 
						|
		display_name:
 | 
						|
				A file that can be read to obtain a user friendly
 | 
						|
				description of the at <attr>
 | 
						|
 | 
						|
		display_name_language_code:
 | 
						|
						A file that can be read to obtain
 | 
						|
						the IETF language tag corresponding to the
 | 
						|
						"display_name" of the <attr>
 | 
						|
 | 
						|
		"enumeration"-type specific properties:
 | 
						|
 | 
						|
		possible_values:
 | 
						|
					A file that can be read to obtain the possible
 | 
						|
					values of the <attr>. Values are separated using
 | 
						|
					semi-colon (``;``).
 | 
						|
 | 
						|
		"integer"-type specific properties:
 | 
						|
 | 
						|
		min_value:
 | 
						|
				A file that can be read to obtain the lower
 | 
						|
				bound value of the <attr>
 | 
						|
 | 
						|
		max_value:
 | 
						|
				A file that can be read to obtain the upper
 | 
						|
				bound value of the <attr>
 | 
						|
 | 
						|
		scalar_increment:
 | 
						|
					A file that can be read to obtain the scalar value used for
 | 
						|
					increments of current_value this attribute accepts.
 | 
						|
 | 
						|
		"string"-type specific properties:
 | 
						|
 | 
						|
		max_length:
 | 
						|
				A file that can be read to obtain the maximum
 | 
						|
				length value of the <attr>
 | 
						|
 | 
						|
		min_length:
 | 
						|
				A file that can be read to obtain the minimum
 | 
						|
				length value of the <attr>
 | 
						|
 | 
						|
		Dell specific class extensions
 | 
						|
		------------------------------
 | 
						|
 | 
						|
		On Dell systems the following additional attributes are available:
 | 
						|
 | 
						|
		dell_modifier:
 | 
						|
				A file that can be read to obtain attribute-level
 | 
						|
				dependency rule. It says an attribute X will become read-only or
 | 
						|
				suppressed, if/if-not attribute Y is configured.
 | 
						|
 | 
						|
				modifier rules can be in following format::
 | 
						|
 | 
						|
				    [ReadOnlyIf:<attribute>=<value>]
 | 
						|
				    [ReadOnlyIfNot:<attribute>=<value>]
 | 
						|
				    [SuppressIf:<attribute>=<value>]
 | 
						|
				    [SuppressIfNot:<attribute>=<value>]
 | 
						|
 | 
						|
				For example::
 | 
						|
 | 
						|
				    AutoOnFri/dell_modifier has value,
 | 
						|
					    [SuppressIfNot:AutoOn=SelectDays]
 | 
						|
 | 
						|
				This means AutoOnFri will be suppressed in BIOS setup if AutoOn
 | 
						|
				attribute is not "SelectDays" and its value will not be effective
 | 
						|
				through sysfs until this rule is met.
 | 
						|
 | 
						|
		Enumeration attributes also support the following:
 | 
						|
 | 
						|
		dell_value_modifier:
 | 
						|
					A file that can be read to obtain value-level dependency.
 | 
						|
					This file is similar to dell_modifier but here,	an
 | 
						|
					attribute's current value will be forcefully changed based
 | 
						|
					dependent attributes value.
 | 
						|
 | 
						|
					dell_value_modifier rules can be in following format::
 | 
						|
 | 
						|
					    <value>[ForceIf:<attribute>=<value>]
 | 
						|
					    <value>[ForceIfNot:<attribute>=<value>]
 | 
						|
 | 
						|
					For example::
 | 
						|
 | 
						|
					    LegacyOrom/dell_value_modifier has value:
 | 
						|
						    Disabled[ForceIf:SecureBoot=Enabled]
 | 
						|
 | 
						|
					This means LegacyOrom's current value will be forced to
 | 
						|
					"Disabled" in BIOS setup if SecureBoot is Enabled and its
 | 
						|
					value will not be effective through sysfs until this rule is
 | 
						|
					met.
 | 
						|
 | 
						|
		HP specific class extensions
 | 
						|
		------------------------------
 | 
						|
 | 
						|
		On HP systems the following additional attributes are available:
 | 
						|
 | 
						|
		"ordered-list"-type specific properties:
 | 
						|
 | 
						|
		elements:
 | 
						|
					A file that can be read to obtain the possible
 | 
						|
					list of values of the <attr>. Values are separated using
 | 
						|
					semi-colon (``;``) and listed according to their priority.
 | 
						|
					An element listed first has the highest priority. Writing
 | 
						|
					the list in a different order to current_value alters
 | 
						|
					the priority order for the particular attribute.
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/authentication/
 | 
						|
Date:		February 2021
 | 
						|
KernelVersion:	5.11
 | 
						|
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
 | 
						|
		Prasanth KSR <prasanth.ksr@dell.com>
 | 
						|
		Dell.Client.Kernel@dell.com
 | 
						|
Description:
 | 
						|
		Devices support various authentication mechanisms which can be exposed
 | 
						|
		as a separate configuration object.
 | 
						|
 | 
						|
		For example a "BIOS Admin" password and "System" Password can be set,
 | 
						|
		reset or cleared using these attributes.
 | 
						|
 | 
						|
		- An "Admin" password is used for preventing modification to the BIOS
 | 
						|
		  settings.
 | 
						|
		- A "System" password is required to boot a machine.
 | 
						|
 | 
						|
		Change in any of these two authentication methods will also generate an
 | 
						|
		uevent KOBJ_CHANGE.
 | 
						|
 | 
						|
		is_enabled:
 | 
						|
					A file that can be read to obtain a 0/1 flag to see if
 | 
						|
					<attr> authentication is enabled.
 | 
						|
					This attribute is mandatory.
 | 
						|
 | 
						|
		role:
 | 
						|
					The type of authentication used.
 | 
						|
					This attribute is mandatory.
 | 
						|
 | 
						|
					Known types:
 | 
						|
						bios-admin:
 | 
						|
							Representing BIOS administrator password
 | 
						|
						power-on:
 | 
						|
							Representing a password required to use
 | 
						|
							the system
 | 
						|
						system-mgmt:
 | 
						|
							Representing System Management password.
 | 
						|
							See Lenovo extensions section for details
 | 
						|
						HDD:
 | 
						|
							Representing HDD password
 | 
						|
							See Lenovo extensions section for details
 | 
						|
						NVMe:
 | 
						|
							Representing NVMe password
 | 
						|
							See Lenovo extensions section for details
 | 
						|
 | 
						|
		mechanism:
 | 
						|
					The means of authentication.  This attribute is mandatory.
 | 
						|
					Supported types are "password" or "certificate".
 | 
						|
 | 
						|
		max_password_length:
 | 
						|
					A file that can be read to obtain the
 | 
						|
					maximum length of the Password
 | 
						|
 | 
						|
		min_password_length:
 | 
						|
					A file that can be read to obtain the
 | 
						|
					minimum length of the Password
 | 
						|
 | 
						|
		current_password:
 | 
						|
					A write only value used for privileged access such as
 | 
						|
					setting	attributes when a system or admin password is set
 | 
						|
					or resetting to a new password
 | 
						|
 | 
						|
					This attribute is mandatory when mechanism == "password".
 | 
						|
 | 
						|
		new_password:
 | 
						|
					A write only value that when used in tandem with
 | 
						|
					current_password will reset a system or admin password.
 | 
						|
 | 
						|
		Note, password management is session specific. If Admin password is set,
 | 
						|
		same password must be written into current_password file (required for
 | 
						|
		password-validation) and must be cleared once the session is over.
 | 
						|
		For example::
 | 
						|
 | 
						|
			echo "password" > current_password
 | 
						|
			echo "disabled" > TouchScreen/current_value
 | 
						|
			echo "" > current_password
 | 
						|
 | 
						|
		Drivers may emit a CHANGE uevent when a password is set or unset
 | 
						|
		userspace may check it again.
 | 
						|
 | 
						|
		On Dell, Lenovo and HP systems, if Admin password is set, then all BIOS attributes
 | 
						|
		require password validation.
 | 
						|
		On Lenovo systems if you change the Admin password the new password is not active until
 | 
						|
		the next boot.
 | 
						|
 | 
						|
		Lenovo specific class extensions
 | 
						|
		--------------------------------
 | 
						|
 | 
						|
		On Lenovo systems the following additional settings are available:
 | 
						|
 | 
						|
		role: system-mgmt	This gives the same authority as the bios-admin password to control
 | 
						|
					security related features. The authorities allocated can be set via
 | 
						|
					the BIOS menu SMP Access Control Policy
 | 
						|
 | 
						|
		role: HDD & NVMe	This password is used to unlock access to the drive at boot. Note see
 | 
						|
					'level' and 'index' extensions below.
 | 
						|
 | 
						|
		lenovo_encoding:
 | 
						|
					The encoding method that is used. This can be either "ascii"
 | 
						|
					or "scancode". Default is set to "ascii"
 | 
						|
 | 
						|
		lenovo_kbdlang:
 | 
						|
					The keyboard language method that is used. This is generally a
 | 
						|
					two char code (e.g. "us", "fr", "gr") and may vary per platform.
 | 
						|
					Default is set to "us"
 | 
						|
 | 
						|
		level:
 | 
						|
					Available for HDD and NVMe authentication to set 'user' or 'master'
 | 
						|
					privilege level.
 | 
						|
					If only the user password is configured then this should be used to
 | 
						|
					unlock the drive at boot. If both master and user passwords are set
 | 
						|
					then either can be used. If a master password is set a user password
 | 
						|
					is required.
 | 
						|
					This attribute defaults to 'user' level
 | 
						|
 | 
						|
		index:
 | 
						|
					Used with HDD and NVME authentication to set the drive index
 | 
						|
					that is being referenced (e.g hdd1, hdd2 etc)
 | 
						|
					This attribute defaults to device 1.
 | 
						|
 | 
						|
		certificate, signature, save_signature:
 | 
						|
					These attributes are used for certificate based authentication. This is
 | 
						|
					used in conjunction with a signing server as an alternative to password
 | 
						|
					based authentication.
 | 
						|
					The user writes to the attribute(s) with a BASE64 encoded string obtained
 | 
						|
					from the signing server.
 | 
						|
					The attributes can be displayed to check the stored value.
 | 
						|
 | 
						|
					Some usage examples:
 | 
						|
 | 
						|
						Installing a certificate to enable feature::
 | 
						|
 | 
						|
							echo "supervisor password" > authentication/Admin/current_password
 | 
						|
							echo "signed certificate" > authentication/Admin/certificate
 | 
						|
 | 
						|
						Updating the installed certificate::
 | 
						|
 | 
						|
							echo "signature" > authentication/Admin/signature
 | 
						|
							echo "signed certificate" > authentication/Admin/certificate
 | 
						|
 | 
						|
						Removing the installed certificate::
 | 
						|
 | 
						|
							echo "signature" > authentication/Admin/signature
 | 
						|
							echo "" > authentication/Admin/certificate
 | 
						|
 | 
						|
						Changing a BIOS setting::
 | 
						|
 | 
						|
							echo "signature" > authentication/Admin/signature
 | 
						|
							echo "save signature" > authentication/Admin/save_signature
 | 
						|
							echo Enable > attribute/PasswordBeep/current_value
 | 
						|
 | 
						|
					You cannot enable certificate authentication if a supervisor password
 | 
						|
					has not been set.
 | 
						|
					Clearing the certificate results in no bios-admin authentication method
 | 
						|
					being configured allowing anyone to make changes.
 | 
						|
					After any of these operations the system must reboot for the changes to
 | 
						|
					take effect.
 | 
						|
					Admin and System certificates are supported from 2025 systems onward.
 | 
						|
 | 
						|
		certificate_thumbprint:
 | 
						|
					Read only attribute used to display the MD5, SHA1 and SHA256 thumbprints
 | 
						|
					for the certificate installed in the BIOS.
 | 
						|
 | 
						|
		certificate_to_password:
 | 
						|
					Write only attribute used to switch from certificate based authentication
 | 
						|
					back to password based.
 | 
						|
					Usage::
 | 
						|
 | 
						|
						echo "signature" > authentication/Admin/signature
 | 
						|
						echo "password" > authentication/Admin/certificate_to_password
 | 
						|
 | 
						|
		HP specific class extensions
 | 
						|
		--------------------------------
 | 
						|
 | 
						|
		On HP systems the following additional settings are available:
 | 
						|
 | 
						|
		role: enhanced-bios-auth:
 | 
						|
					This role is specific to Secure Platform Management (SPM) attribute.
 | 
						|
					It requires configuring an endorsement (kek) and signing certificate (sk).
 | 
						|
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/attributes/pending_reboot
 | 
						|
Date:		February 2021
 | 
						|
KernelVersion:	5.11
 | 
						|
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
 | 
						|
		Prasanth KSR <prasanth.ksr@dell.com>
 | 
						|
		Dell.Client.Kernel@dell.com
 | 
						|
Description:
 | 
						|
		A read-only attribute reads 1 if a reboot is necessary to apply
 | 
						|
		pending BIOS attribute changes. Also, an uevent_KOBJ_CHANGE is
 | 
						|
		generated when it changes to 1.
 | 
						|
 | 
						|
			==	=========================================
 | 
						|
			0	All BIOS attributes setting are current
 | 
						|
			1	A reboot is necessary to get pending BIOS
 | 
						|
				attribute changes applied
 | 
						|
			==	=========================================
 | 
						|
 | 
						|
		Note, userspace applications need to follow below steps for efficient
 | 
						|
		BIOS management,
 | 
						|
 | 
						|
		1.	Check if admin password is set. If yes, follow session method for
 | 
						|
			password management as briefed under authentication section above.
 | 
						|
		2.	Before setting any attribute, check if it has any modifiers
 | 
						|
			or value_modifiers. If yes, incorporate them and then modify
 | 
						|
			attribute.
 | 
						|
 | 
						|
		Drivers may emit a CHANGE uevent when this value changes and userspace
 | 
						|
		may check it again.
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/attributes/reset_bios
 | 
						|
Date:		February 2021
 | 
						|
KernelVersion:	5.11
 | 
						|
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
 | 
						|
		Prasanth KSR <prasanth.ksr@dell.com>
 | 
						|
		Dell.Client.Kernel@dell.com
 | 
						|
Description:
 | 
						|
		This attribute can be used to reset the BIOS Configuration.
 | 
						|
		Specifically, it tells which type of reset BIOS configuration is being
 | 
						|
		requested on the host.
 | 
						|
 | 
						|
		Reading from it returns a list of supported options encoded as:
 | 
						|
 | 
						|
			- 'builtinsafe' (Built in safe configuration profile)
 | 
						|
			- 'lastknowngood' (Last known good saved configuration profile)
 | 
						|
			- 'factory' (Default factory settings configuration profile)
 | 
						|
			- 'custom' (Custom saved configuration profile)
 | 
						|
 | 
						|
		The currently selected option is printed in square brackets as
 | 
						|
		shown below::
 | 
						|
 | 
						|
		    # echo "factory" > /sys/class/firmware-attributes/*/device/attributes/reset_bios
 | 
						|
		    # cat /sys/class/firmware-attributes/*/device/attributes/reset_bios
 | 
						|
		    builtinsafe lastknowngood [factory] custom
 | 
						|
 | 
						|
		Note that any changes to this attribute requires a reboot
 | 
						|
		for changes to take effect.
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/attributes/save_settings
 | 
						|
Date:		August 2023
 | 
						|
KernelVersion:	6.6
 | 
						|
Contact:	Mark Pearson <mpearson-lenovo@squebb.ca>
 | 
						|
Description:
 | 
						|
		On Lenovo platforms there is a limitation in the number of times an attribute can be
 | 
						|
		saved. This is an architectural limitation and it limits the number of attributes
 | 
						|
		that can be modified to 48.
 | 
						|
		A solution for this is instead of the attribute being saved after every modification,
 | 
						|
		to allow a user to bulk set the attributes, and then trigger a final save. This allows
 | 
						|
		unlimited attributes.
 | 
						|
 | 
						|
		Read the attribute to check what save mode is enabled (single or bulk).
 | 
						|
		E.g:
 | 
						|
		# cat /sys/class/firmware-attributes/thinklmi/attributes/save_settings
 | 
						|
		single
 | 
						|
 | 
						|
		Write the attribute with 'bulk' to enable bulk save mode.
 | 
						|
		Write the attribute with 'single' to enable saving, after every attribute set.
 | 
						|
		The default setting is single mode.
 | 
						|
		E.g:
 | 
						|
		# echo bulk > /sys/class/firmware-attributes/thinklmi/attributes/save_settings
 | 
						|
 | 
						|
		When in bulk mode write 'save' to trigger a save of all currently modified attributes.
 | 
						|
		Note, once a save has been triggered, in bulk mode, attributes can no longer be set and
 | 
						|
		will return a permissions error. This is to prevent users hitting the 48+ save limitation
 | 
						|
		(which requires entering the BIOS to clear the error condition)
 | 
						|
		E.g:
 | 
						|
		# echo save > /sys/class/firmware-attributes/thinklmi/attributes/save_settings
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/attributes/debug_cmd
 | 
						|
Date:		July 2021
 | 
						|
KernelVersion:	5.14
 | 
						|
Contact:	Mark Pearson <markpearson@lenovo.com>
 | 
						|
Description:
 | 
						|
		This write only attribute can be used to send debug commands to the BIOS.
 | 
						|
		This should only be used when recommended by the BIOS vendor. Vendors may
 | 
						|
		use it to enable extra debug attributes or BIOS features for testing purposes.
 | 
						|
 | 
						|
		Note that any changes to this attribute requires a reboot for changes to take effect.
 | 
						|
 | 
						|
 | 
						|
		HP specific class extensions - Secure Platform Manager (SPM)
 | 
						|
		--------------------------------
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/authentication/SPM/kek
 | 
						|
Date:		March 2023
 | 
						|
KernelVersion:	5.18
 | 
						|
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
 | 
						|
Description:
 | 
						|
		'kek' Key-Encryption-Key is a write-only file that can be used to configure the
 | 
						|
		RSA public key that will be used by the BIOS to verify
 | 
						|
		signatures when setting the signing key.  When written,
 | 
						|
		the bytes should correspond to the KEK certificate
 | 
						|
		(x509 .DER format containing an OU).  The size of the
 | 
						|
		certificate must be less than or equal to 4095 bytes.
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/authentication/SPM/sk
 | 
						|
Date:		March 2023
 | 
						|
KernelVersion:	5.18
 | 
						|
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
 | 
						|
Description:
 | 
						|
		'sk' Signature Key is a write-only file that can be used to configure the RSA
 | 
						|
		public key that will be used by the BIOS to verify signatures
 | 
						|
		when configuring BIOS settings and security features.  When
 | 
						|
		written, the bytes should correspond to the modulus of the
 | 
						|
		public key.  The exponent is assumed to be 0x10001.
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/authentication/SPM/status
 | 
						|
Date:		March 2023
 | 
						|
KernelVersion:	5.18
 | 
						|
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
 | 
						|
Description:
 | 
						|
		'status' is a read-only file that returns ASCII text in JSON format reporting
 | 
						|
		the status information.
 | 
						|
 | 
						|
		  "State": "not provisioned | provisioned | provisioning in progress",
 | 
						|
		  "Version": "Major.Minor",
 | 
						|
		  "Nonce": <16-bit unsigned number display in base 10>,
 | 
						|
		  "FeaturesInUse": <16-bit unsigned number display in base 10>,
 | 
						|
		  "EndorsementKeyMod": "<256 bytes in base64>",
 | 
						|
		  "SigningKeyMod": "<256 bytes in base64>"
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/attributes/Sure_Start/audit_log_entries
 | 
						|
Date:		March 2023
 | 
						|
KernelVersion:	5.18
 | 
						|
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
 | 
						|
Description:
 | 
						|
		'audit_log_entries' is a read-only file that returns the events in the log.
 | 
						|
 | 
						|
			Audit log entry format
 | 
						|
 | 
						|
			Byte 0-15:   Requested Audit Log entry  (Each Audit log is 16 bytes)
 | 
						|
			Byte 16-127: Unused
 | 
						|
 | 
						|
What:		/sys/class/firmware-attributes/*/attributes/Sure_Start/audit_log_entry_count
 | 
						|
Date:		March 2023
 | 
						|
KernelVersion:	5.18
 | 
						|
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
 | 
						|
Description:
 | 
						|
		'audit_log_entry_count' is a read-only file that returns the number of existing
 | 
						|
		audit log events available to be read. Values are separated using comma. (``,``)
 | 
						|
 | 
						|
			[No of entries],[log entry size],[Max number of entries supported]
 | 
						|
 | 
						|
		log entry size identifies audit log size for the current BIOS version.
 | 
						|
		The current size is 16 bytes but it can be up to 128 bytes long in future BIOS
 | 
						|
		versions.
 |