File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -180,6 +180,8 @@ def _build_runtime_args(self) -> list[str]:
180180 if self ._config .use_kata_runtime :
181181 return [
182182 "--cap-add=ALL" ,
183+ "--device-cgroup-rule" ,
184+ "c 10:232 rwm" ,
183185 "--security-opt" ,
184186 "seccomp=unconfined" ,
185187 "--runtime=io.containerd.kata.v2" ,
Original file line number Diff line number Diff line change @@ -28,6 +28,27 @@ is_nix() {
2828 fi
2929}
3030
31+ # Kata guest KVM is a misc character device. Its number belongs to the guest
32+ # kernel and can differ from the outer host's /dev/kvm device number.
33+ setup_kata_guest_kvm () {
34+ local kvm_major=10
35+ local kvm_minor=232
36+ local registered_minor
37+
38+ if [ ! -r /proc/misc ]; then
39+ echo " Kata guest KVM setup failed: /proc/misc is unavailable." >&2
40+ return 1
41+ fi
42+ registered_minor=$( awk ' $2 == "kvm" { print $1; exit }' /proc/misc)
43+ if [ " ${registered_minor} " != " ${kvm_minor} " ]; then
44+ echo " Kata guest KVM setup failed: expected misc device ${kvm_major} :${kvm_minor} , found minor ${registered_minor:- none} ." >&2
45+ return 1
46+ fi
47+
48+ rm -f /dev/kvm
49+ mknod -m 600 /dev/kvm c " ${kvm_major} " " ${kvm_minor} "
50+ }
51+
3152# Kata DinD: set up loop device and mount disk image for Docker storage
3253setup_kata_dind () {
3354 local docker_root=" /var/lib/docker"
@@ -79,7 +100,8 @@ if [ "$(is_nix)" = "true" ]; then
79100fi
80101
81102if [ " ${ROCK_KATA_RUNTIME} " = " true" ]; then
82- echo " Kata runtime detected, setting up DinD disk..."
103+ echo " Kata runtime detected, setting up guest KVM and DinD disk..."
104+ setup_kata_guest_kvm
83105 setup_kata_dind
84106fi
85107
Original file line number Diff line number Diff line change @@ -99,3 +99,22 @@ def test_kata_runtime_env_absent_when_disabled(self):
9999 mock_env .ROCK_TIME_ZONE = "UTC"
100100 args = deployment ._build_env_args ()
101101 assert "ROCK_KATA_RUNTIME=true" not in args
102+
103+
104+ class TestBuildRuntimeArgs :
105+ def test_kata_runtime_grants_guest_kvm_device_number (self ):
106+ deployment = _make_deployment (use_kata_runtime = True )
107+
108+ args = deployment ._build_runtime_args ()
109+
110+ rule_index = args .index ("--device-cgroup-rule" )
111+ assert args [rule_index + 1 ] == "c 10:232 rwm"
112+ assert "--device=/dev/kvm" not in args
113+
114+ def test_default_runtime_does_not_grant_guest_kvm_device (self ):
115+ deployment = _make_deployment (use_kata_runtime = False )
116+
117+ args = deployment ._build_runtime_args ()
118+
119+ assert args == ["--privileged" ]
120+ assert "--device-cgroup-rule" not in args
You can’t perform that action at this time.
0 commit comments