Skip to content

Commit 51649a7

Browse files
dsouzaicyphar
authored andcommitted
Allow mounting of /proc/sys/kernel/ns_last_pid
The CAP_CHECKPOINT_RESTORE linux capability provides the ability to update /proc/sys/kernel/ns_last_pid. However, because this file is under /proc, and by default both K8s and CRI-O specify that /proc/sys should be mounted as Read-Only, by default even with the capability specified, a process will not be able to write to ns_last_pid. To get around this, a pod author can specify a volume mount and a hostpath to bind-mount /proc/sys/kernel/ns_last_pid. However, runc does not allow specifying mounts under /proc. This commit adds /proc/sys/kernel/ns_last_pid to the validProcMounts string array to enable a pod author to mount ns_last_pid as read-write. The default remains unchanged; unless explicitly requested as a volume mount, ns_last_pid will remain read-only regardless of whether or not CAP_CHECKPOINT_RESTORE is specified. Signed-off-by: Irwin D'Souza <[email protected]>
1 parent 9d00472 commit 51649a7

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

libcontainer/rootfs_linux.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,7 @@ func checkProcMount(rootfs, dest, source string) error {
577577
"/proc/loadavg",
578578
"/proc/slabinfo",
579579
"/proc/net/dev",
580+
"/proc/sys/kernel/ns_last_pid",
580581
}
581582
for _, valid := range validProcMounts {
582583
path, err := filepath.Rel(filepath.Join(rootfs, valid), dest)

libcontainer/rootfs_linux_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@ func TestCheckMountDestFalsePositive(t *testing.T) {
3838
}
3939
}
4040

41+
func TestCheckMountDestNsLastPid(t *testing.T) {
42+
dest := "/rootfs/proc/sys/kernel/ns_last_pid"
43+
err := checkProcMount("/rootfs", dest, "/proc")
44+
if err != nil {
45+
t.Fatal("/proc/sys/kernel/ns_last_pid should not return an error")
46+
}
47+
}
48+
4149
func TestNeedsSetupDev(t *testing.T) {
4250
config := &configs.Config{
4351
Mounts: []*configs.Mount{

0 commit comments

Comments
 (0)