Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

fix: BAR writes through PCI configuration capability #5403

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

Copy link
Contributor

@bchalios bchalios commented Aug 25, 2025
edited
Loading

PCI configuration capability allows a driver to access a BAR without mapping it in virtual address space. The driver issues reads/writes directly within the PCI configuration space (which should always be addressable either via MMIO or Port IO) which the device translates corresponding BAR accesses.

The way this works is that the guests writes the offset and length of a BAR access within the capability structure and then reads/writes data using a 4-bytes dedicated array that also lives in the capability address space.

We had a bug in the logic that handles writes where a guest would program a write of a certain length (L) and then try to perform a write using a buffer where buffer.len() < L. Our logic would then try to perform a write using the slice buffer[..L] which would cause Rust to panic with an out of range exception.

Fix this by taking into account the buffer's length and using a slice with length min(L, buffer.len()).

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

  • I have read and understand CONTRIBUTING.md.
  • I have run tools/devtool checkbuild --all to verify that the PR passes
    build checks on all supported architectures.
  • I have run tools/devtool checkstyle to verify that the PR passes the
    automated style checks.
  • I have described what is done in these changes, why they are needed, and
    how they are solving the problem in a clear and encompassing way.
  • I have updated any relevant documentation (both in code and in the docs)
    in the PR.
  • I have mentioned all user-facing changes in CHANGELOG.md.
  • If a specific issue led to this PR, this PR closes the issue.
  • When making API changes, I have followed the
    Runbook for Firecracker API changes.
  • I have tested all new and changed functionalities in unit tests and/or
    integration tests.
  • I have linked an issue to every new TODO.

  • This functionality cannot be added in rust-vmm.

PCI configuration capability allows a driver to access a BAR without
mapping it in virtual address space. The driver issues reads/writes
directly within the PCI configuration space (which should always be
addressable either via MMIO or Port IO) which the device translates
corresponding BAR accesses.
The way this works is that the guests writes the offset and length of a
BAR access within the capability structure and then reads/writes data
using a 4-bytes dedicated array that also lives in the capability
address space.
We had a bug in the logic that handles writes where a guest would
program a write of a certain length (L) and then try to perform a write
using a buffer where buffer.len() < L. Our logic would then try to
perform a write using the slice buffer[..L] which would cause Rust to
panic with an out of range exception.
Fix this by taking into account the buffer's length and using a slice
with length min(L, buffer.len()).
Signed-off-by: Babis Chalios <bchalios@amazon.es>
@bchalios bchalios enabled auto-merge (rebase) August 25, 2025 14:38
Copy link

codecov bot commented Aug 25, 2025
edited
Loading

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.17%. Comparing base (92e936d) to head (35f02a1).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@
## main #5403 +/- ##
==========================================
+ Coverage 83.12% 83.17% +0.04% 
==========================================
 Files 266 266 
 Lines 30526 30527 +1 
==========================================
+ Hits 25376 25391 +15 
+ Misses 5150 5136 -14 
Flag Coverage Δ
5.10-c5n.metal 83.23% <100.00%> (+<0.01%) ⬆️
5.10-m5n.metal 83.23% <100.00%> (+<0.01%) ⬆️
5.10-m6a.metal 82.54% <100.00%> (+<0.01%) ⬆️
5.10-m6g.metal 79.86% <100.00%> (+<0.01%) ⬆️
5.10-m6i.metal 83.22% <100.00%> (-0.01%) ⬇️
5.10-m7a.metal-48xl 82.53% <100.00%> (?)
5.10-m7g.metal 79.86% <100.00%> (+<0.01%) ⬆️
5.10-m7i.metal-24xl 83.20% <100.00%> (?)
5.10-m7i.metal-48xl 83.19% <100.00%> (?)
5.10-m8g.metal-24xl 79.86% <100.00%> (?)
5.10-m8g.metal-48xl 79.86% <100.00%> (?)
6.1-c5n.metal 83.27% <100.00%> (+<0.01%) ⬆️
6.1-m5n.metal 83.27% <100.00%> (-0.01%) ⬇️
6.1-m6a.metal 82.58% <100.00%> (+<0.01%) ⬆️
6.1-m6g.metal 79.86% <100.00%> (+<0.01%) ⬆️
6.1-m6i.metal 83.26% <100.00%> (+<0.01%) ⬆️
6.1-m7a.metal-48xl 82.58% <100.00%> (?)
6.1-m7g.metal 79.86% <100.00%> (+<0.01%) ⬆️
6.1-m7i.metal-24xl 83.29% <100.00%> (?)
6.1-m7i.metal-48xl 83.28% <100.00%> (?)
6.1-m8g.metal-24xl 79.86% <100.00%> (?)
6.1-m8g.metal-48xl 79.86% <100.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@bchalios bchalios self-assigned this Aug 25, 2025
@bchalios bchalios added the Status: Awaiting review Indicates that a pull request is ready to be reviewed label Aug 25, 2025
@bchalios bchalios merged commit af1d121 into firecracker-microvm:main Aug 26, 2025
8 checks passed
@bchalios bchalios deleted the fix_pci_config_cap_writes branch August 26, 2025 13:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Reviewers

@Manciukic Manciukic Manciukic approved these changes

@ShadowCurse ShadowCurse ShadowCurse approved these changes

Labels
Status: Awaiting review Indicates that a pull request is ready to be reviewed
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /