Skip to content

Commit ddee0b6

Browse files
committed
fix(pci): capabilities are always little-endian
See https://docs.oasis-open.org/virtio/virtio/v1.2/cs01/virtio-v1.2-cs01.html#x1-1240004 "This virtio structure capability uses little-endian format" Signed-off-by: Jens Reidel <[email protected]>
1 parent 3e5b576 commit ddee0b6

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/pci.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ pub struct Cap {
119119
impl Cap {
120120
pub fn read(addr: PciCapabilityAddress, access: impl ConfigRegionAccess) -> Option<Self> {
121121
let data = unsafe { access.read(addr.address, addr.offset) };
122-
let [cap_vndr, _cap_next, cap_len, _cfg_type] = data.to_ne_bytes();
122+
let [cap_vndr, _cap_next, cap_len, _cfg_type] = data.to_le_bytes();
123123

124124
if cap_vndr != 0x09 {
125125
return None;
@@ -136,6 +136,8 @@ impl Cap {
136136
unsafe { access.read(addr.address, addr.offset + 12) },
137137
];
138138

139+
let data: [u32; 4] = data.map(u32::from_le);
140+
139141
let this = unsafe { mem::transmute::<[u32; 4], Self>(data) };
140142

141143
Some(this)

0 commit comments

Comments
 (0)