Skip to content

Commit 4672852

Browse files
authored
Create an RFC to add optional fields to the PFM versions command. (#18)
* Create an RFC to add optional fields to the PFM versions command. * Update with PR information. * Update RFC per review comments. * Rename RFC to next available number.
1 parent d9c9cc3 commit 4672852

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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

Comments
 (0)