mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
vmm: device_manager: Reject mis-sized PCI hotplug register accesses
Reject without asserting that the ACPI PCI hotplug register request matches what is defined in the ACPI definition. Signed-off-by: Rob Bradford <rbradford@meta.com> Assisted-by: Claude:Opus-4.7
This commit is contained in:
@@ -6006,7 +6006,10 @@ impl BusDevice for DeviceManager {
|
|||||||
fn read(&mut self, base: u64, offset: u64, data: &mut [u8]) {
|
fn read(&mut self, base: u64, offset: u64, data: &mut [u8]) {
|
||||||
match offset {
|
match offset {
|
||||||
PCIU_FIELD_OFFSET => {
|
PCIU_FIELD_OFFSET => {
|
||||||
assert!(data.len() == PCIU_FIELD_SIZE);
|
if data.len() != PCIU_FIELD_SIZE {
|
||||||
|
warn!("Invalid sized read of PCIU register: {}", data.len());
|
||||||
|
return;
|
||||||
|
}
|
||||||
data.copy_from_slice(
|
data.copy_from_slice(
|
||||||
&self.pci_segments[self.selected_segment]
|
&self.pci_segments[self.selected_segment]
|
||||||
.pci_devices_up
|
.pci_devices_up
|
||||||
@@ -6016,7 +6019,10 @@ impl BusDevice for DeviceManager {
|
|||||||
self.pci_segments[self.selected_segment].pci_devices_up = 0;
|
self.pci_segments[self.selected_segment].pci_devices_up = 0;
|
||||||
}
|
}
|
||||||
PCID_FIELD_OFFSET => {
|
PCID_FIELD_OFFSET => {
|
||||||
assert!(data.len() == PCID_FIELD_SIZE);
|
if data.len() != PCID_FIELD_SIZE {
|
||||||
|
warn!("Invalid sized read of PCID register: {}", data.len());
|
||||||
|
return;
|
||||||
|
}
|
||||||
data.copy_from_slice(
|
data.copy_from_slice(
|
||||||
&self.pci_segments[self.selected_segment]
|
&self.pci_segments[self.selected_segment]
|
||||||
.pci_devices_down
|
.pci_devices_down
|
||||||
|
|||||||
Reference in New Issue
Block a user