summaryrefslogtreecommitdiff
path: root/sys-process/below/files/below-0.3.0-cgroup-parse-fixes-02.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-process/below/files/below-0.3.0-cgroup-parse-fixes-02.patch')
-rw-r--r--sys-process/below/files/below-0.3.0-cgroup-parse-fixes-02.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/sys-process/below/files/below-0.3.0-cgroup-parse-fixes-02.patch b/sys-process/below/files/below-0.3.0-cgroup-parse-fixes-02.patch
new file mode 100644
index 000000000000..f8c15b6d49e7
--- /dev/null
+++ b/sys-process/below/files/below-0.3.0-cgroup-parse-fixes-02.patch
@@ -0,0 +1,92 @@
+From 80fb95e06ddc5f311e0c9dc20b19d00058ca39af Mon Sep 17 00:00:00 2001
+From: Brian Chen <brianc118@fb.com>
+Date: Tue, 31 Aug 2021 14:59:57 -0700
+Subject: [PATCH] Fix procfs reading cgroups with colon in name
+
+Summary:
+When reading cgroup membership, we split by ':' and expect there to
+be 3 parts. This is not always the case since cgroup name can
+contain ':'.
+
+Reviewed By: lnyng
+
+Differential Revision: D30681159
+
+fbshipit-source-id: 895e1b26965ae33454a19c2ec1bc5478a5f95635
+---
+ below/procfs/src/lib.rs | 2 +-
+ below/procfs/src/test.rs | 34 ++++++++++++++++++++++++++++++----
+ 2 files changed, 31 insertions(+), 5 deletions(-)
+
+--- a/below/procfs/src/lib.rs
++++ b/below/procfs/src/lib.rs
+@@ -565,7 +565,7 @@ impl ProcReader {
+ // A line starting with "0::" would be an entry for cgroup v2.
+ // Otherwise, the line containing "pids" controller is what we want
+ // for cgroup v1.
+- let parts: Vec<_> = line.split(':').collect();
++ let parts: Vec<_> = line.splitn(3, ':').collect();
+ if parts.len() == 3 {
+ if parts[0] == "0" && parts[1] == "" {
+ cgroup_path = Some(parts[2].to_owned());
+--- a/below/procfs/src/test.rs
++++ b/below/procfs/src/test.rs
+@@ -804,7 +804,7 @@ cancelled_write_bytes: 5431947264
+
+ #[test]
+ fn test_pid_cgroupv2() {
+- let cgroup = b"0::/user.slice/user-119756.slice/session-3.scope
++ let cgroup = b"0::/user.slice/user:with:colon.slice/session-3.scope
+ ";
+
+ let procfs = TestProcfs::new();
+@@ -814,12 +814,12 @@ fn test_pid_cgroupv2() {
+ .read_pid_cgroup(1024)
+ .expect("Failed to read pid cgroup file");
+
+- assert_eq!(cgroup, "/user.slice/user-119756.slice/session-3.scope");
++ assert_eq!(cgroup, "/user.slice/user:with:colon.slice/session-3.scope");
+ }
+
+ #[test]
+ fn test_pid_cgroupv1() {
+- let cgroup = b"11:pids:/init.scope
++ let cgroup = b"11:pids:/cgroup-path:colon
+ 10:perf_event:/
+ 9:hugetlb:/
+ 8:cpu,cpuacct:/init.scope
+@@ -838,7 +838,33 @@ fn test_pid_cgroupv1() {
+ .read_pid_cgroup(1024)
+ .expect("Failed to read pid cgroup file");
+
+- assert_eq!(cgroup, "/init.scope");
++ assert_eq!(cgroup, "/cgroup-path:colon");
++}
++
++#[test]
++fn test_pid_cgroupv1and2() {
++ let cgroup = b"11:pids:/cgroup-path:colon
++10:perf_event:/
++9:hugetlb:/
++8:cpu,cpuacct:/init.scope
++7:blkio:/init.scope
++6:freezer:/
++5:cpuset:/
++4:memory:/init.scope
++3:devices:/init.scope
++2:net_cls,net_prio:/
++1:name=systemd:/init.scope
++0::/user.slice/user:with:colon.slice/session-3.scope";
++
++ let procfs = TestProcfs::new();
++ procfs.create_pid_file_with_content(1024, "cgroup", cgroup);
++ let reader = procfs.get_reader();
++ let cgroup = reader
++ .read_pid_cgroup(1024)
++ .expect("Failed to read pid cgroup file");
++
++ // When we see both cgroup v1 and v2, v2 takes precedence
++ assert_eq!(cgroup, "/user.slice/user:with:colon.slice/session-3.scope");
+ }
+
+ #[test]