Re: [PATCH v5 1/5] Introduction of HP-BIOSCFG driver (1)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,


>
> > +
> > +             "sure-admin"-type specific properties:
> > +
> > +             settings:
> > +                                     A file associated with Sure Admin. BIOS settings can
> > +                                     be read or written through the Sure Admin settings file in sysfs.
> > +
> > +                                     [BIOS setting],[new value],[auth token]
> > +
> > +                                     Sample settings reported data
> > +
> > +                                     {
> > +                                             "Class": "HPBIOS_BIOSEnumeration",
> > +                                             "Name": "USB Storage Boot",
> > +                                             "Path": "\\Advanced\\Boot Options",
> > +                                             "IsReadOnly": 0,
> > +                                             ...
> > +                                             "Value": "Enable",
> > +                                             "Size": 2,
> > +                                             "PossibleValues": [
> > +                                                     "Disable",
> > +                                                     "Enable"
> > +                                                     ]
> > +                                     }
> > +
> > +                                     This file can also be written to in order to update
> > +                                     the value sof a <attr> using a CMSL generated payload.
> > +                                     For example:
> > +
> > +                                     <attr>,[value],[CMSL generated payload]
>
>
> This is basically a run-around around the actual firmware attributes API,
> so NACK for this.
>
> Looking at how sure_admin_settings_write() encodes things I don't see any
> difference between how auth-tokens/CFML-payloads are handled vs regular passwords
> inside hp_set_attribute().

Yes. The handling of auth-tokens/CMSL-payloads vs regular passwords
are similar with the exception of their size.
auth-tokens/CMSL-payloads are in the size larger than 64 bytes while
passwords are limited to 64 bytes.
>
> Except for the BEAM_PREFIX thing, which can be added to calculate_security_buffer() /
> populate_security_buffer() too and in that case all 3 of the following should simply
> work, taking a boot-delay integer attribute as example:
>
> echo "password" > /sys/class/firmware-attributes/hp-bioscfg/"Setup Password"/current_password
> echo 5 > /sys/class/firmware-attributes/hp-bioscfg/attributes/boot-delay/current_value
>
> echo "auth-token" > /sys/class/firmware-attributes/hp-bioscfg/"Setup Password"/current_password
> echo 5 > /sys/class/firmware-attributes/hp-bioscfg/attributes/boot-delay/current_value
>
> cat csml-payload.file > /sys/class/firmware-attributes/hp-bioscfg/"Setup Password"/current_password
> echo 5 > /sys/class/firmware-attributes/hp-bioscfg/attributes/boot-delay/current_value

Last two cases cannot be handled by passing auth-token/CMSL payloads
values to the current password due to their possible sizes.
Passwords are limited to 64 bytes in size while
auth-tokens/CFML-payloads are in the size larger than 64 bytes
Here are examples of CMSL flow for your records.  Most of generated
payloads are stored remotely and signed by customer to ensure the data
integrity.   The full benefit of this process is better represented
when configuring Security settings in BIOS. (Sure Run, Sure Start,
Sure Recovery, etc)
.
1. Customer generates a signed CMSL payload to set BIOS "USB Storage
Boot" value to "Enable"

CMSL command:

New-HPSureAdminBIOSSettingValuePayload -Name "USB Storage Boot" -Value
"Enable" -SigningKeyFile sk.pfx -SigningKeyPassword test

Generated payload:

{"timestamp":"2022-09-26T16:01:22.7887948-05:00","purpose":"hp:sureadmin:biossetting","Data":[123,10,32,32,34,78,97,109,101,34,58,32,34,85,83,66,32,83,116,111,114,97,103,101,32,66,111,111,116,34,44,10,32,32,34,86,97,108,117,101,34,58,32,34,69,110,97,98,108,101,34,44,10,32,32,34,65,117,116,104,83,116,114,105,110,103,34,58,32,34,60,66,69,65,77,47,62,65,83,65,65,68,65,65,65,73,120,77,121,89,119,72,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,68,85,78,87,111,74,67,117,122,51,73,69,71,57,75,51,80,113,107,103,121,76,52,108,100,119,83,67,79,69,65,83,47,98,108,68,122,111,116,47,105,77,43,86,103,122,90,77,69,116,43,48,75,87,75,78,103,119,89,99,86,102,121,97,70,56,99,104,102,57,85,47,86,82,106,51,52,122,112,53,111,43,85,112,97,119,97,116,106,50,74,103,115,97,105,104,113,54,90,53,84,48,101,49,114,56,78,80,109,69,105,119,103,113,118,77,51,108,97,86,83,98,116,101,66,112,80,81,88,119,102,66,56,101,105,112,119,120,104,121,67,68,65,85,111,118,69,113,82,51,84,71,79,54,109,101,75,119,71,100,73,104,72,103,102,50,112,72,75,90,50,107,47,66,116,104,97,98,110,115,118,78,77,114,98,74,69,103,76,72,76,121,87,84,119,98,76,74,87,108,101,106,112,71,121,47,70,100,83,105,74,114,101,66,114,81,115,114,106,90,113,100,76,75,72,90,71,117,108,52,70,108,43,117,47,72,102,107,48,119,121,81,69,106,121,97,99,51,52,57,105,90,55,97,104,49,72,56,50,85,97,50,49,55,109,74,51,88,56,87,113,80,111,50,86,72,65,85,57,71,102,47,113,107,97,85,101,75,76,84,97,75,87,101,121,122,116,68,109,105,68,98,115,114,47,86,51,51,106,114,101,67,88,65,65,109,120,68,76,73,73,66,103,83,88,79,82,82,117,98,80,53,113,80,78,69,53,67,76,120,104,119,61,61,34,10,125],"Meta1":null,"Meta2":null,"Meta3":null,"Meta4":null}


The application reads the CMSL payload and sends the command to the
driver.  The payload is translated to  [BIOS setting], [Value],
[Password || auth-token]


echo "USB Storage
Boot,Enable,<BEAM/>ASAADAAANZ9AYwH/////////////////////64bPg7ygUv4xanoHIFrzME9mIsxeJh32fkhR7sgHpXdEHjetMXxNVhEK/twhhXhHS93kp9JpGhsr+J6AMKV2ldE99iJHo6ul1IxJQuBSxBoN1mf49Mm/ROCNll+IhsAn4ow+xlDwKQn2EzKtQc2Wf1eC646KPcl+ZCtiFhvLzXZrGSXsB2hJy0+IzegUPzLY6jaN0lYyQMtQ0KpcyGnK6xZSKCKfotygWawWY8BD3oewyrVLdKMGjrtX4HtHaeo5A9VVXVt89i7lZAmV3VkRtu70LEv240ue/SOhwrxGtydgNmtpV3dSn/ancnY4ONbTxBRiw8cifObEiNOidYzhpQ=="
> /sys/class/firmware-attributes/hp-bioscfg/attributes/Sure_Admin/settings'

As you can see, the auth-token  "<BEAN/>.....==" portion varies in
size depending on the signing certificate size used.

A method that can be used to address your comments and allow the
driver to handle both auth-tokens and password using command

       echo "auth-token" >
/sys/class/firmware-attributes/hp-bioscfg/"Setup
Password"/current_password

is adding an modifier to indicate if the input is a password or auth-token

For instance...  using [Token] modifier to identify the data is an
authentication token

     echo "[token] auth-token" >
/sys/class/firmware-attributes/hp-bioscfg/"Setup
Password"/current_password

If the modifier is missing, the driver will treat the data as a password.

This new method will conform with the firmware class framework and
provide the flexibility needed for HP solution.

Please advise.

>
> The only reason why this would not work is if things may get bigger then the size of a single
> memory page (bigger then 4096 bytes).
>
> But in that case you should just change the code implementing current_password to
> use the bin_attribute interface and replace the static buffer for storing it
> with a pointer to kmalloc-ed memory, which is NULL when the password is not set.
>
> This will also remove a lot of finicky parsing which is currently done inside
> sure_admin_settings_write()
>
> ###
>
> As for the reading which returns a large large list of data blocks like this:
>
>                                         {
>                                                 "Class": "HPBIOS_BIOSEnumeration",
>                                                 "Name": "USB Storage Boot",
>                                                 "Path": "\\Advanced\\Boot Options",
>                                                 "IsReadOnly": 0,
>                                                 ...
>                                                 "Value": "Enable",
>                                                 "Size": 2,
>                                                 "PossibleValues": [
>                                                         "Disable",
>                                                         "Enable"
>                                                         ]
>                                         }
>
> This sort of thing really does not belong in the kernel.

I concur with your statement and behavior will be removed from driver code.




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux