[Bug]: IPMI SSIF Multi-part Read Middle incorrectly expects Block Number to start at 1 #188
Closed
1 task done
Labels
state:needs-maintainer-feedback
Needs more information from a maintainer to determine next steps
state:needs-triage
Needs to triaged to determine next steps
type:bug
Something isn't working
urgency:high
Significant with a critical impact
Is there an existing issue for this?
Current Behavior
According to the SSIF spec, the BMC Multi-part Read Middle should start with block number equal to
0
.However, the current code is expecting the first "middle" response to have a block number that starts at
1
: https://github.com/microsoft/mu_feature_ipmi/blob/main/IpmiFeaturePkg/Library/IpmiTransportLibSsif/Ssif.c#L189C1-L196C8This issue is not observed in Windows/Linux IPMI SSIF interfaces. We can review the Linux kernel SSIF driver to compare the behavior: https://github.com/torvalds/linux/blob/master/drivers/char/ipmi/ipmi_ssif.c#L710C1-L721C4
We can see the Linux kernel SSIF driver is setting the expected block number (
blocknum
) to1
as it uses this to track outstanding multi-part reads. But then it compares the received block number (blocknum
) to the expectedblocknum
but it increments by1
to account formulti_pos
not starting at0
.Expected Behavior
The expectation is for the driver to align to the SSIF spec. This behavior ensures the same BMC firmware can work across all server environments (Windows, Linux, UEIF, BSD, ...).
Steps To Reproduce
Build Environment
Version Information
Urgency
High
Are you going to fix this?
I will fix it
Do you need maintainer feedback?
Maintainer feedback requested
Anything else?
I've captured a Linux kernel trace log from a system with a BMC that aligns to this broken UEFI behavior which causes the Linux IPMI SSIF command to fail:
The observed behavior within Linux is the IPMI SSIF driver receives the "start" packet and a single "middle" packet then it fails with an "out-of-sequence" error message.
The text was updated successfully, but these errors were encountered: