Skip to content

Conversation

@zulinx86
Copy link
Contributor

@zulinx86 zulinx86 commented Jul 3, 2023

Note that this PR will be backported into all the supported versions. The commits are intentionally split into two to make it easier to backport.

Changes

  • Changes the T2S template to set IA32_ARCH_CAPABILITIES.RRSBA to 1.
  • Changes the T2CL template to pass through IA32_ARCH_CAPABILITIES.{RSBA,RRSBA} from the host.

Reason

We updated the fingerprint files in PR #3813, since Intel microcode
release (microcode-20230512) changed to set IA32_ARCH_CAPABILITIES.RRSBA
(bit 19) to 1 on Intel CascadeLake CPU. The mitigation itself is already
in place
which is eIBRS.

Since the kernel enables eIBRS by default using SPECTRE_V2_EIBRS mode
regardless of the IA32_ARCH_CAPABILITIES.RRSBA bit, hosts and guests
should not get impacted by default with this change. However, it has
a role to inform softwares whether the part has the RRSBA behavior.

License Acceptance

By submitting this pull request, I confirm that my contribution is made under
the terms of the Apache 2.0 license. For more information on following
Developer Certificate of Origin and signing off your commits, please check
CONTRIBUTING.md.

PR Checklist

  • [ ] If a specific issue led to this PR, this PR closes the issue.
  • The description of changes is clear and encompassing.
  • [ ] Any required documentation changes (code and docs) are included in this PR.
  • [ ] API changes follow the Runbook for Firecracker API changes.
  • User-facing changes are mentioned in CHANGELOG.md.
  • All added/changed functionality is tested.
  • [ ] New TODOs link to an issue.
  • Commits meet contribution quality standards.

  • This functionality cannot be added in rust-vmm.

@zulinx86 zulinx86 self-assigned this Jul 3, 2023
@zulinx86 zulinx86 added the Type: Fix Indicates a fix to existing code label Jul 3, 2023
@zulinx86 zulinx86 force-pushed the rrsba branch 2 times, most recently from e4ff717 to 2762938 Compare July 3, 2023 10:34
kalyazin
kalyazin previously approved these changes Jul 3, 2023
@zulinx86
Copy link
Contributor Author

zulinx86 commented Jul 3, 2023

fixed a test failure of test_feat_parity_msr_arch_cap.

@zulinx86 zulinx86 added the Status: Awaiting review Indicates that a pull request is ready to be reviewed label Jul 3, 2023
We updated the fingerprint files in PR firecracker-microvm#3813, since Intel microcode
release (microcode-20230512) changed to set IA32_ARCH_CAPABILITIES.RRSBA
(bit 19) to 1 on Intel CascadeLake CPU. The mitigation itself is already
in place which is eIBRS.

Since the kernel enables eIBRS by default using SPECTRE_V2_EIBRS mode
regardless of the IA32_ARCH_CAPABILITIES.RRSBA bit, hosts and guests
should not get impacted by this change. However, it has a role to inform
softwares whether the part has the RRSBA behavior.

The T2S template has set it to 0 explicitly before, but this commit
changes to set it to 1 so that guest kernels and applications can know
that the processor has the RRSBA behavior. The reason why it sets the
bit to 1 instead of passing through it from the host is that it aims to
provide the ability to securely migrate snapshots between Intel Skylake
and Intel CascadeLake.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
We updated the fingerprint files in PR firecracker-microvm#3813, since Intel microcode
release (microcode-20230512) changed to set IA32_ARCH_CAPABILITIES.RRSBA
(bit 19) to 1 on Intel CascadeLake CPU. The mitigation itself is already
in place which is eIBRS.

Since the kernel enables eIBRS by default using SPECTRE_V2_EIBRS mode
regardless of the IA32_ARCH_CAPABILITIES.RRSBA bit, hosts and guests
should not get impacted by this change. However, it has a role to inform
softwares whether the part has the RRSBA behavior.

The T2CL template has set the RRSBA bit to 0 explicitly before, but this
commit changes to pass through the bit from the host so that guest
kernels and applications can know that the processor has the RRSBA
behavior. The reason why it passes through the bit from the host opposed
to the T2S template is that the T2CL template is not designed to allow
snapshot migration between different CPU models.

In addition to the RRSBA bit, this comit also changes to pass through
the RSBA bit, as it is safer to let guest know these informative bits of
the host CPU than to overwrite them with templates.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
@zulinx86 zulinx86 requested a review from kalyazin July 3, 2023 14:30
@pb8o pb8o merged commit d9cec89 into firecracker-microvm:main Jul 3, 2023
@zulinx86 zulinx86 deleted the rrsba branch July 3, 2023 15:10
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each host
CPU model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit gathers MSR baseline
files for combinations of (host CPU, host kernel, guest kernel).

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each host
CPU model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit gathers MSR baseline
files for combinations of (host CPU, host kernel, guest kernel).

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each host
CPU model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit gathers MSR baseline
files for combinations of (host CPU, host kernel, guest kernel).

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each host
CPU model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit gathers MSR baseline
files for combinations of (host CPU, host kernel, guest kernel).

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each host
CPU model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit gathers MSR baseline
files for combinations of (host CPU, host kernel, guest kernel).

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each host
CPU model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit gathers MSR baseline
files for combinations of (host CPU, host kernel, guest kernel).

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 4, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit that referenced this pull request Jul 5, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR #3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 5, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 5, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
zulinx86 added a commit to zulinx86/firecracker that referenced this pull request Jul 5, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
ShadowCurse pushed a commit to ShadowCurse/firecracker that referenced this pull request Jul 26, 2023
Previously all the static CPU templates had not passed through MSRs from
the host, so we did not need to have MSR baseline files for each CPU
model. With PR firecracker-microvm#3907, the T2CL template passes through
IA32_ARCH_CAPABILITIES.{RSBA/RRSBA} which results in difference of the
MSR value between different CPU models. This commit enables MSR
baselines for all the combinations of (host CPU, host kernel, guest
kernel). Actual baseline regathering will be done in a successive
commit.

Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Status: Awaiting review Indicates that a pull request is ready to be reviewed Type: Fix Indicates a fix to existing code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants