mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bb02c28b62 | ||
|
|
b2c96dea24 | ||
|
|
2c81312433 | ||
|
|
e8ee29b4fe | ||
|
|
498939c297 |
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -212,7 +212,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cloud-hypervisor"
|
name = "cloud-hypervisor"
|
||||||
version = "0.14.0"
|
version = "0.14.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"api_client",
|
"api_client",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cloud-hypervisor"
|
name = "cloud-hypervisor"
|
||||||
version = "0.14.0"
|
version = "0.14.1"
|
||||||
authors = ["The Cloud Hypervisor Authors"]
|
authors = ["The Cloud Hypervisor Authors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
default-run = "cloud-hypervisor"
|
default-run = "cloud-hypervisor"
|
||||||
|
|||||||
@@ -124,6 +124,17 @@
|
|||||||
- [Unit testing](#unit-testing)
|
- [Unit testing](#unit-testing)
|
||||||
- [Integration tests parallelization](#integration-tests-parallelization)
|
- [Integration tests parallelization](#integration-tests-parallelization)
|
||||||
|
|
||||||
|
# v0.14.1
|
||||||
|
|
||||||
|
Bug fix release branched off the v0.14.0 release. The following bugs were fixed
|
||||||
|
in this release:
|
||||||
|
|
||||||
|
* CPU hotplug on Windows failed due to misreported CPU state information and
|
||||||
|
the lack of HyperV CPUID bit enabled (#2437, #2449, #2436)
|
||||||
|
* A seccomp rule was missing that was triggered on CPU unplug (#2455)
|
||||||
|
* A bounds check in VIRTIO queue validation was erroneously generating
|
||||||
|
DescriptorChainTooShort errors in certain circumstances (#2450, #2424)
|
||||||
|
|
||||||
# v0.14.0
|
# v0.14.0
|
||||||
|
|
||||||
This release has been tracked through the [0.14.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/17).
|
This release has been tracked through the [0.14.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/17).
|
||||||
|
|||||||
@@ -265,10 +265,7 @@ impl<'a> DescriptorChain<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn is_valid(&self) -> bool {
|
fn is_valid(&self) -> bool {
|
||||||
!(self
|
!(!self.mem.check_range(self.addr, self.len as usize)
|
||||||
.mem
|
|
||||||
.checked_offset(self.addr, self.len as usize)
|
|
||||||
.is_none()
|
|
||||||
|| (self.has_next() && self.next >= self.table_size))
|
|| (self.has_next() && self.next >= self.table_size))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -433,12 +433,16 @@ const CPU_SELECTION_OFFSET: u64 = 0;
|
|||||||
|
|
||||||
impl BusDevice for CpuManager {
|
impl BusDevice for CpuManager {
|
||||||
fn read(&mut self, _base: u64, offset: u64, data: &mut [u8]) {
|
fn read(&mut self, _base: u64, offset: u64, data: &mut [u8]) {
|
||||||
|
// The Linux kernel, quite reasonably, doesn't zero the memory it gives us.
|
||||||
|
data.copy_from_slice(&[0; 8][0..data.len()]);
|
||||||
|
|
||||||
match offset {
|
match offset {
|
||||||
|
CPU_SELECTION_OFFSET => {
|
||||||
|
data[0] = self.selected_cpu;
|
||||||
|
}
|
||||||
CPU_STATUS_OFFSET => {
|
CPU_STATUS_OFFSET => {
|
||||||
if self.selected_cpu < self.present_vcpus() {
|
if self.selected_cpu < self.present_vcpus() {
|
||||||
let state = &self.vcpu_states[usize::from(self.selected_cpu)];
|
let state = &self.vcpu_states[usize::from(self.selected_cpu)];
|
||||||
// The Linux kernel, quite reasonably, doesn't zero the memory it gives us.
|
|
||||||
data.copy_from_slice(&[0; 8][0..data.len()]);
|
|
||||||
if state.active() {
|
if state.active() {
|
||||||
data[0] |= 1 << CPU_ENABLE_FLAG;
|
data[0] |= 1 << CPU_ENABLE_FLAG;
|
||||||
}
|
}
|
||||||
@@ -742,10 +746,18 @@ impl CpuManager {
|
|||||||
| 1 << 2 // AccessSynicRegs
|
| 1 << 2 // AccessSynicRegs
|
||||||
| 1 << 3 // AccessSyntheticTimerRegs
|
| 1 << 3 // AccessSyntheticTimerRegs
|
||||||
| 1 << 9, // AccessPartitionReferenceTsc
|
| 1 << 9, // AccessPartitionReferenceTsc
|
||||||
|
edx: 1 << 3, // CPU dynamic partitioning
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.map_err(Error::CpuidKvmHyperV)?;
|
.map_err(Error::CpuidKvmHyperV)?;
|
||||||
for i in 0x4000_0004..=0x4000_000a {
|
cpuid
|
||||||
|
.push(CpuIdEntry {
|
||||||
|
function: 0x4000_0004,
|
||||||
|
eax: 1 << 5, // Recommend relaxed timing
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
.map_err(Error::CpuidKvmHyperV)?;
|
||||||
|
for i in 0x4000_0005..=0x4000_000a {
|
||||||
cpuid
|
cpuid
|
||||||
.push(CpuIdEntry {
|
.push(CpuIdEntry {
|
||||||
function: i,
|
function: i,
|
||||||
|
|||||||
@@ -418,6 +418,7 @@ fn vcpu_thread_rules() -> Result<Vec<SyscallRuleSet>, Error> {
|
|||||||
Ok(vec![
|
Ok(vec![
|
||||||
allow_syscall(libc::SYS_brk),
|
allow_syscall(libc::SYS_brk),
|
||||||
allow_syscall(libc::SYS_clock_gettime),
|
allow_syscall(libc::SYS_clock_gettime),
|
||||||
|
allow_syscall(libc::SYS_clock_nanosleep),
|
||||||
allow_syscall(libc::SYS_close),
|
allow_syscall(libc::SYS_close),
|
||||||
allow_syscall(libc::SYS_dup),
|
allow_syscall(libc::SYS_dup),
|
||||||
allow_syscall(libc::SYS_exit),
|
allow_syscall(libc::SYS_exit),
|
||||||
|
|||||||
Reference in New Issue
Block a user