oxidecomputer / oxidecomputer/omicron

Host flash APOB info should probably be cleared across host boot flash versions

Open
#10,084 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
572
Forks
97
Avg merge
2d 12h
Merged PRs (30d)
96

Description

(I've been asked to file this here as an update issue, though it's going to require a lot of derived work in lower level systems.)

We've run into a case where the host crashloops during boot, induced by the contents of the APOB data written by a previous boot. The crashloop is in AMD's PSP firmware, which is (1) not supposed to do this and (2) not a thing we can fix.

(The APOB data records, among other things, information that lets the host skip re-running DRAM training on the next boot, saving approximately 6 minutes.)

But the conditions to provoke the crash are familiar to anyone who's dealt with downgrade:

  • Boot the host with AMD firmware version X.
  • Let it boot far enough that it records an updated APOB blob.
  • Reboot the host into AMD firmware version X-1.
  • PSP crashes.

So this looks like a downgrade format incompatibility in AMD's APOB parser.

To guard against this sort of thing, we realized in conversation with @luqmana that we should probably clear the APOB contents across host boot flash updates, or otherwise ensure that version X can't see an APOB deposited by version Y. (Implementation alternatives to "clearing flash" that we discussed include tying each APOB blob to a hash of the host boot blob, and pretending any APOB written by a different hash doesn't exist.)

There are some design questions there at a low level (RFD 593 describes the original design, which may need revision) which we'll probably have to figure out in recursive tickets. Among other things, the SP currently does not provide an interface to clear APOB data or bind it to a hash.

CC @Aaron-Hartwig @mkeeter @adamlouis @hawkw @hermanol

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with RFD 593, then trace the existing host boot flash and APOB handling described by the issue. Resolve whether APOB data should be cleared or bound to a host boot blob hash, accounting for the SP interface limitation. Done means a selected design and implementation path prevents a firmware version from consuming incompatible APOB data after an update or downgrade.

Written by the indexing model from the issue text.

Assessment

Domain
infrastructure, operating-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.