mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-15 06:34:03 +00:00
Merge c9f523bc82
into 9379a18c8a
This commit is contained in:
commit
eb3f0d9232
4
src/dragonball/Cargo.lock
generated
4
src/dragonball/Cargo.lock
generated
@ -1810,9 +1810,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "seccompiler"
|
name = "seccompiler"
|
||||||
version = "0.2.0"
|
version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e01d1292a1131b22ccea49f30bd106f1238b5ddeec1a98d39268dcc31d540e68"
|
checksum = "a4ae55de56877481d112a559bbc12667635fdaf5e005712fd4e2b2fa50ffc884"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
@ -33,7 +33,7 @@ event-manager = "0.2.1"
|
|||||||
kvm-bindings = "0.6.0"
|
kvm-bindings = "0.6.0"
|
||||||
kvm-ioctls = "0.12.0"
|
kvm-ioctls = "0.12.0"
|
||||||
linux-loader = "0.8.0"
|
linux-loader = "0.8.0"
|
||||||
seccompiler = "0.2.0"
|
seccompiler = "0.5.0"
|
||||||
vfio-bindings = "0.3.0"
|
vfio-bindings = "0.3.0"
|
||||||
vfio-ioctls = "0.1.0"
|
vfio-ioctls = "0.1.0"
|
||||||
virtio-bindings = "0.1.0"
|
virtio-bindings = "0.1.0"
|
||||||
|
4
src/runtime-rs/Cargo.lock
generated
4
src/runtime-rs/Cargo.lock
generated
@ -4143,9 +4143,9 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "seccompiler"
|
name = "seccompiler"
|
||||||
version = "0.2.0"
|
version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e01d1292a1131b22ccea49f30bd106f1238b5ddeec1a98d39268dcc31d540e68"
|
checksum = "a4ae55de56877481d112a559bbc12667635fdaf5e005712fd4e2b2fa50ffc884"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
@ -195,6 +195,9 @@ block_device_driver = "virtio-blk-pci"
|
|||||||
# result in memory pre allocation
|
# result in memory pre allocation
|
||||||
#enable_hugepages = true
|
#enable_hugepages = true
|
||||||
|
|
||||||
|
# Disable the 'seccomp' feature from Cloud Hypervisor, firecracker or dragonball, default false
|
||||||
|
# disable_seccomp = true
|
||||||
|
|
||||||
# This option changes the default hypervisor and kernel parameters
|
# This option changes the default hypervisor and kernel parameters
|
||||||
# to enable debug output where available.
|
# to enable debug output where available.
|
||||||
#
|
#
|
||||||
|
@ -219,6 +219,9 @@ virtio_fs_cache = "@DEFVIRTIOFSCACHE@"
|
|||||||
# result in memory pre allocation
|
# result in memory pre allocation
|
||||||
#enable_hugepages = true
|
#enable_hugepages = true
|
||||||
|
|
||||||
|
# Disable the 'seccomp' feature from Cloud Hypervisor, firecracker or dragonball, default false
|
||||||
|
# disable_seccomp = true
|
||||||
|
|
||||||
# Enable swap in the guest. Default false.
|
# Enable swap in the guest. Default false.
|
||||||
# When enable_guest_swap is enabled, insert a raw file to the guest as the swap device.
|
# When enable_guest_swap is enabled, insert a raw file to the guest as the swap device.
|
||||||
#enable_guest_swap = true
|
#enable_guest_swap = true
|
||||||
|
@ -145,6 +145,9 @@ block_device_driver = "@DEFBLOCKSTORAGEDRIVER_FC@"
|
|||||||
# result in memory pre allocation
|
# result in memory pre allocation
|
||||||
#enable_hugepages = true
|
#enable_hugepages = true
|
||||||
|
|
||||||
|
# Disable the 'seccomp' feature from Cloud Hypervisor, firecracker or dragonball, default false
|
||||||
|
# disable_seccomp = true
|
||||||
|
|
||||||
# Enable vIOMMU, default false
|
# Enable vIOMMU, default false
|
||||||
# Enabling this will result in the VM having a vIOMMU device
|
# Enabling this will result in the VM having a vIOMMU device
|
||||||
# This will also add the following options to the kernel's
|
# This will also add the following options to the kernel's
|
||||||
|
@ -15,7 +15,7 @@ go-flag = { workspace = true }
|
|||||||
libc = { workspace = true }
|
libc = { workspace = true }
|
||||||
nix = { workspace = true }
|
nix = { workspace = true }
|
||||||
rust-ini = "0.18.0"
|
rust-ini = "0.18.0"
|
||||||
seccompiler = "0.2.0"
|
seccompiler = "0.5.0"
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
slog = { workspace = true }
|
slog = { workspace = true }
|
||||||
|
@ -16,6 +16,7 @@ use super::inner::DragonballInner;
|
|||||||
use crate::{
|
use crate::{
|
||||||
utils::{self, get_hvsock_path, get_jailer_root, get_sandbox_path},
|
utils::{self, get_hvsock_path, get_jailer_root, get_sandbox_path},
|
||||||
VcpuThreadIds, VmmState,
|
VcpuThreadIds, VmmState,
|
||||||
|
dragonball::seccomp::{ThreadType, get_seccomp_filter},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl DragonballInner {
|
impl DragonballInner {
|
||||||
@ -27,6 +28,21 @@ impl DragonballInner {
|
|||||||
self.jailer_root = get_jailer_root(id);
|
self.jailer_root = get_jailer_root(id);
|
||||||
self.netns = netns;
|
self.netns = netns;
|
||||||
|
|
||||||
|
if !self.config.security_info.disable_seccomp {
|
||||||
|
let seccomp = HashMap::from([
|
||||||
|
(
|
||||||
|
ThreadType::Vmm,
|
||||||
|
get_seccomp_filter(&ThreadType::Vmm),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
ThreadType::Vcpu,
|
||||||
|
get_seccomp_filter(&ThreadType::Vcpu),
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
|
self.vmm_instance.set_seccomp(seccomp);
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ use super::HypervisorState;
|
|||||||
use inner::DragonballInner;
|
use inner::DragonballInner;
|
||||||
use persist::sandbox_persist::Persist;
|
use persist::sandbox_persist::Persist;
|
||||||
pub mod vmm_instance;
|
pub mod vmm_instance;
|
||||||
|
mod seccomp;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
40
src/runtime-rs/crates/hypervisor/src/dragonball/seccomp.rs
Normal file
40
src/runtime-rs/crates/hypervisor/src/dragonball/seccomp.rs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright (c) 2019-2022 Alibaba Cloud
|
||||||
|
// Copyright (c) 2019-2022 Ant Group
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
|
||||||
|
use seccompiler::{BpfProgram, SeccompAction, SeccompFilter};
|
||||||
|
use std::convert::TryInto;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub enum ThreadType {
|
||||||
|
Vcpu,
|
||||||
|
Vmm,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_seccomp_filter(thread_type: &ThreadType) -> BpfProgram {
|
||||||
|
let rules = match thread_type {
|
||||||
|
ThreadType::Vcpu => get_vcpu_seccomp_rules(),
|
||||||
|
ThreadType::Vmm => get_vmm_seccomp_rules(),
|
||||||
|
};
|
||||||
|
SeccompFilter::new(
|
||||||
|
rules.into_iter().collect(),
|
||||||
|
// TODO: modify the action after determining the action needed for dragonball
|
||||||
|
SeccompAction::Allow,
|
||||||
|
SeccompAction::Allow,
|
||||||
|
std::env::consts::ARCH.try_into().unwrap(),
|
||||||
|
)
|
||||||
|
.and_then(|f| f.try_into())
|
||||||
|
.unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_vcpu_seccomp_rules() -> Vec<(i64, Vec<seccompiler::SeccompRule>)> {
|
||||||
|
// TODO: add vcpu seccomp rules
|
||||||
|
vec![]
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_vmm_seccomp_rules() -> Vec<(i64, Vec<seccompiler::SeccompRule>)> {
|
||||||
|
// TODO: add vmm seccomp rules
|
||||||
|
vec![]
|
||||||
|
}
|
@ -5,6 +5,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
|
collections::HashMap,
|
||||||
fs::{File, OpenOptions},
|
fs::{File, OpenOptions},
|
||||||
os::unix::{io::IntoRawFd, prelude::AsRawFd},
|
os::unix::{io::IntoRawFd, prelude::AsRawFd},
|
||||||
sync::{Arc, Mutex, RwLock},
|
sync::{Arc, Mutex, RwLock},
|
||||||
@ -34,6 +35,8 @@ use vmm_sys_util::eventfd::EventFd;
|
|||||||
|
|
||||||
use crate::ShareFsMountOperation;
|
use crate::ShareFsMountOperation;
|
||||||
|
|
||||||
|
use crate::dragonball::seccomp::ThreadType;
|
||||||
|
|
||||||
pub enum Request {
|
pub enum Request {
|
||||||
Sync(VmmAction),
|
Sync(VmmAction),
|
||||||
}
|
}
|
||||||
@ -49,7 +52,7 @@ pub struct VmmInstance {
|
|||||||
to_vmm: Option<Sender<VmmRequest>>,
|
to_vmm: Option<Sender<VmmRequest>>,
|
||||||
from_vmm: Option<Receiver<VmmResponse>>,
|
from_vmm: Option<Receiver<VmmResponse>>,
|
||||||
to_vmm_fd: EventFd,
|
to_vmm_fd: EventFd,
|
||||||
seccomp: BpfProgram,
|
seccomp: HashMap<ThreadType, BpfProgram>,
|
||||||
vmm_thread: Option<thread::JoinHandle<Result<i32>>>,
|
vmm_thread: Option<thread::JoinHandle<Result<i32>>>,
|
||||||
exit_notify: Option<mpsc::Sender<i32>>,
|
exit_notify: Option<mpsc::Sender<i32>>,
|
||||||
}
|
}
|
||||||
@ -69,7 +72,7 @@ impl VmmInstance {
|
|||||||
to_vmm: None,
|
to_vmm: None,
|
||||||
from_vmm: None,
|
from_vmm: None,
|
||||||
to_vmm_fd,
|
to_vmm_fd,
|
||||||
seccomp: vec![],
|
seccomp: HashMap::new(),
|
||||||
vmm_thread: None,
|
vmm_thread: None,
|
||||||
exit_notify: Some(exit_notify),
|
exit_notify: Some(exit_notify),
|
||||||
}
|
}
|
||||||
@ -103,6 +106,10 @@ impl VmmInstance {
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_seccomp(&mut self, seccomp: HashMap<ThreadType, BpfProgram>) {
|
||||||
|
self.seccomp = seccomp;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run_vmm_server(&mut self, id: &str, netns: Option<String>) -> Result<()> {
|
pub fn run_vmm_server(&mut self, id: &str, netns: Option<String>) -> Result<()> {
|
||||||
let kvm = OpenOptions::new().read(true).write(true).open(KVM_DEVICE)?;
|
let kvm = OpenOptions::new().read(true).write(true).open(KVM_DEVICE)?;
|
||||||
|
|
||||||
@ -120,8 +127,14 @@ impl VmmInstance {
|
|||||||
let vmm = Vmm::new(
|
let vmm = Vmm::new(
|
||||||
self.vmm_shared_info.clone(),
|
self.vmm_shared_info.clone(),
|
||||||
api_event_fd2,
|
api_event_fd2,
|
||||||
self.seccomp.clone(),
|
self.seccomp
|
||||||
self.seccomp.clone(),
|
.get(&ThreadType::Vmm)
|
||||||
|
.unwrap_or(&vec![])
|
||||||
|
.clone(),
|
||||||
|
self.seccomp
|
||||||
|
.get(&ThreadType::Vcpu)
|
||||||
|
.unwrap_or(&vec![])
|
||||||
|
.clone(),
|
||||||
Some(kvm.into_raw_fd()),
|
Some(kvm.into_raw_fd()),
|
||||||
)
|
)
|
||||||
.expect("Failed to start vmm");
|
.expect("Failed to start vmm");
|
||||||
|
Loading…
Reference in New Issue
Block a user