mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
Compare commits
5 Commits
v38.0
...
stable/v0.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bb02c28b62 | ||
|
|
b2c96dea24 | ||
|
|
2c81312433 | ||
|
|
e8ee29b4fe | ||
|
|
498939c297 |
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -212,7 +212,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cloud-hypervisor"
|
||||
version = "0.14.0"
|
||||
version = "0.14.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"api_client",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "cloud-hypervisor"
|
||||
version = "0.14.0"
|
||||
version = "0.14.1"
|
||||
authors = ["The Cloud Hypervisor Authors"]
|
||||
edition = "2018"
|
||||
default-run = "cloud-hypervisor"
|
||||
|
||||
@@ -124,6 +124,17 @@
|
||||
- [Unit testing](#unit-testing)
|
||||
- [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
|
||||
|
||||
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 {
|
||||
!(self
|
||||
.mem
|
||||
.checked_offset(self.addr, self.len as usize)
|
||||
.is_none()
|
||||
!(!self.mem.check_range(self.addr, self.len as usize)
|
||||
|| (self.has_next() && self.next >= self.table_size))
|
||||
}
|
||||
|
||||
|
||||
@@ -433,12 +433,16 @@ const CPU_SELECTION_OFFSET: u64 = 0;
|
||||
|
||||
impl BusDevice for CpuManager {
|
||||
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 {
|
||||
CPU_SELECTION_OFFSET => {
|
||||
data[0] = self.selected_cpu;
|
||||
}
|
||||
CPU_STATUS_OFFSET => {
|
||||
if self.selected_cpu < self.present_vcpus() {
|
||||
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() {
|
||||
data[0] |= 1 << CPU_ENABLE_FLAG;
|
||||
}
|
||||
@@ -742,10 +746,18 @@ impl CpuManager {
|
||||
| 1 << 2 // AccessSynicRegs
|
||||
| 1 << 3 // AccessSyntheticTimerRegs
|
||||
| 1 << 9, // AccessPartitionReferenceTsc
|
||||
edx: 1 << 3, // CPU dynamic partitioning
|
||||
..Default::default()
|
||||
})
|
||||
.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
|
||||
.push(CpuIdEntry {
|
||||
function: i,
|
||||
|
||||
@@ -418,6 +418,7 @@ fn vcpu_thread_rules() -> Result<Vec<SyscallRuleSet>, Error> {
|
||||
Ok(vec![
|
||||
allow_syscall(libc::SYS_brk),
|
||||
allow_syscall(libc::SYS_clock_gettime),
|
||||
allow_syscall(libc::SYS_clock_nanosleep),
|
||||
allow_syscall(libc::SYS_close),
|
||||
allow_syscall(libc::SYS_dup),
|
||||
allow_syscall(libc::SYS_exit),
|
||||
|
||||
Reference in New Issue
Block a user