Skip to content

Commit f1c7993

Browse files
committed
seutil: Fix setting the "container_kvm_t" label
The ability to handle KVM based runtimes with SELinux has been added as part of d715d00. However, that commit introduced some logic to check whether the "container_kvm_t" label would or not be present in the system, and while the intentions were good, there's two major issues with the approach: 1. Inspecting "/etc/selinux/targeted/contexts/customizable_types" is not the way to go, as it doesn't list the "container_kvm_t" at all. 2. There's no need to check for the label, as if the label is invalid an "Invalid Label" error will be returned and that's it. With those two in mind, let's simplify the logic behind setting the "container_kvm_t" label, removing all the unnecessary code. Here's an output of VMM process running, considering: * The state before this patch: ``` $ containerd --version containerd github.com/containerd/containerd v1.6.0-beta.3-88-g7fa44fc98 7fa44fc $ kubectl apply -f ~/simple-pod.yaml pod/nginx created $ ps -auxZ | grep cloud-hypervisor system_u:system_r:container_runtime_t:s0 root 609717 4.0 0.5 2987512 83588 ? Sl 08:32 0:00 /usr/bin/cloud-hypervisor --api-socket /run/vc/vm/be9d5cbabf440510d58d89fc8a8e77c27e96ddc99709ecaf5ab94c6b6b0d4c89/clh-api.sock ``` * The state after this patch: ``` $ containerd --version containerd github.com/containerd/containerd v1.6.0-beta.3-89-ga5f2113c9 a5f2113c9fc15b19b2c364caaedb99c22de4eb32 $ kubectl apply -f ~/simple-pod.yaml pod/nginx created $ ps -auxZ | grep cloud-hypervisor system_u:system_r:container_kvm_t:s0:c638,c999 root 614842 14.0 0.5 2987512 83228 ? Sl 08:40 0:00 /usr/bin/cloud-hypervisor --api-socket /run/vc/vm/f8ff838afdbe0a546f6995fe9b08e0956d0d0cdfe749705d7ce4618695baa68c/clh-api.sock ``` Note, the tests were performed using the following configuration snippet: ``` [plugins] [plugins.cri] enable_selinux = true [plugins.cri.containerd] [plugins.cri.containerd.runtimes] [plugins.cri.containerd.runtimes.kata] runtime_type = "io.containerd.kata.v2" privileged_without_host_devices = true ``` And using the following pod yaml: ``` apiVersion: v1 kind: Pod metadata: name: nginx spec: runtimeClassName: kata containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` Fixes: containerd#6371 Signed-off-by: Fabiano Fidêncio <[email protected]>
1 parent 7fa44fc commit f1c7993

2 files changed

Lines changed: 1 addition & 38 deletions

File tree

pkg/cri/server/helpers_linux.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -269,17 +269,10 @@ func modifyProcessLabel(runtimeType string, spec *specs.Spec) error {
269269
if !isVMBasedRuntime(runtimeType) {
270270
return nil
271271
}
272-
l, err := getKVMLabel(spec.Process.SelinuxLabel)
272+
l, err := seutil.ChangeToKVM(spec.Process.SelinuxLabel)
273273
if err != nil {
274274
return errors.Wrap(err, "failed to get selinux kvm label")
275275
}
276276
spec.Process.SelinuxLabel = l
277277
return nil
278278
}
279-
280-
func getKVMLabel(l string) (string, error) {
281-
if !seutil.HasType("container_kvm_t") {
282-
return "", nil
283-
}
284-
return seutil.ChangeToKVM(l)
285-
}

pkg/seutil/seutil.go

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,9 @@
1717
package seutil
1818

1919
import (
20-
"bufio"
21-
"os"
22-
2320
"github.com/opencontainers/selinux/go-selinux"
2421
)
2522

26-
var seTypes map[string]struct{}
27-
28-
const typePath = "/etc/selinux/targeted/contexts/customizable_types"
29-
30-
func init() {
31-
seTypes = make(map[string]struct{})
32-
if !selinux.GetEnabled() {
33-
return
34-
}
35-
f, err := os.Open(typePath)
36-
if err != nil {
37-
return
38-
}
39-
defer f.Close()
40-
s := bufio.NewScanner(f)
41-
for s.Scan() {
42-
seTypes[s.Text()] = struct{}{}
43-
}
44-
}
45-
46-
// HasType returns true if the underlying system has the
47-
// provided selinux type enabled.
48-
func HasType(name string) bool {
49-
_, ok := seTypes[name]
50-
return ok
51-
}
52-
5323
// ChangeToKVM process label
5424
func ChangeToKVM(l string) (string, error) {
5525
if l == "" || !selinux.GetEnabled() {

0 commit comments

Comments
 (0)