|
| 1 | +* Name: Extension for the PFM Supported Versions Command |
| 2 | +* Date: 2021-05-11 |
| 3 | +* Pull Request: [#18](https://github.com/opencomputeproject/Security/pull/18) |
| 4 | + |
| 5 | +# Objective |
| 6 | + |
| 7 | +In the original design, there was only a single firmware component supported in |
| 8 | +a PFM. The command to get the list of supported versions in a PFM didn't require |
| 9 | +any additional granularity. With the introduction of version 2 of the PFM |
| 10 | +structure, there can now be multiple independent firmware components, each with |
| 11 | +their own list of supported firmware versions. It is not always useful to get |
| 12 | +the full list of all versions for all components within a PFM. Returning |
| 13 | +supported versions in this way would make it more challenging to search for a |
| 14 | +specific version of a specific component. There needs to be a way to target a |
| 15 | +specific component's supported versions. |
| 16 | + |
| 17 | +# Proposal |
| 18 | + |
| 19 | +Update the Get Platform Firmware Manifest Supported Firmware command to have |
| 20 | +optional fields added to the request to specify the firmware component ID to |
| 21 | +query. If these optional fields are not provided, every version for every |
| 22 | +component will be returned. |
| 23 | + |
| 24 | +# Specification Changelist |
| 25 | + |
| 26 | +The request structure for Get Platform Firmware Manifest Supported Firmware |
| 27 | +(https://github.com/opencomputeproject/Security/blob/master/RoT/Protocol/Challenge_Protocol.md#get-platform-firmware-manifest-supported-firmware) |
| 28 | +will be updated to include: |
| 29 | +1. A single byte length field that will specify the length of the firmware ID. |
| 30 | +2. A variable length, null-terminated firmware ID string. |
| 31 | + |
| 32 | +# Implementation Guidance |
| 33 | + |
| 34 | +When dealing with v1 PFMs, specifying any firmware ID would return an error, as |
| 35 | +there are no component IDs specified in this format. The command without the |
| 36 | +optional parameters will behave as it always has. |
| 37 | + |
| 38 | +# Alternatives Considered |
| 39 | + |
| 40 | +1. Since the current command simply returns ASCII strings, the response payload |
| 41 | +can just be filled with a list that includes a heading for each type of firmware |
| 42 | +using the FW ID followed by a list of supported versions. This would work cleanly |
| 43 | +when the purpose is just to display what is currently supported, but would not be |
| 44 | +so good in scenarios where the list is being queried to make decisions about the |
| 45 | +supported list (e.g. when checking for support during host FW updates). In this |
| 46 | +case, you only want to check support against a specific FW type, not all FW types. |
| 47 | +This would require a lot of assumptions on the client side about the response |
| 48 | +contents and might not be cleanly backwards compatible. |
| 49 | +2. Deprecate the existing command and replace it with a new one that provides |
| 50 | +the necessary semantics to support this flow. This would clearly delineate |
| 51 | +between devices that support the new information vs. devices that don’t. |
| 52 | +Ultimately, this level of demarcation of functionality was not seen as |
| 53 | +necessary. |
| 54 | +3. A less obvious mapping would be to support independent ports for each |
| 55 | +component within the manifest. But this would be challenging to know what ports |
| 56 | +map to whay component. Since there is a variable number of firmware types in |
| 57 | +each PFM, the port mapping wouldn’t be static. This would require no changes to |
| 58 | +the current command structure, but is a potentially confusing interface. |
| 59 | + |
| 60 | +# Future Work |
| 61 | + |
| 62 | +Optimizations necessary to read back large lists of supported firmware versions. |
0 commit comments