| 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. |
| Only supported type currently is "password". |
| |
| 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. |
| |
| 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. |