cgroup-util: Don't try to open pidfd for kernel threads
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 31 Jul 2024 11:38:50 +0000 (13:38 +0200)
committerLuca Boccassi <bluca@debian.org>
Thu, 15 Aug 2024 13:04:41 +0000 (14:04 +0100)
The kernel might start returning -EINVAL when trying to open pidfd's
for kernel threads so let's not try to open pidfd's for kernel threads.

(cherry picked from commit ead48ec35c863650944352a3455f26ce3b393058)

src/basic/cgroup-util.c

index 1fc83a656a8cb7fa58fe85a173f3bc9b86e86b53..b0fe0ecbe8f122a320d79ddca4af2b2567421018 100644 (file)
@@ -149,7 +149,9 @@ int cg_read_pidref(FILE *f, PidRef *ret, CGroupFlags flags) {
                 if (pid == 0)
                         return -EREMOTE;
 
-                if (FLAGS_SET(flags, CGROUP_NO_PIDFD)) {
+                /* We might read kernel thread pids from cgroup.procs for which we cannot create a pidfd so
+                 * catch those and don't try to create a pidfd for them. */
+                if (FLAGS_SET(flags, CGROUP_NO_PIDFD) || pid_is_kernel_thread(pid) > 0) {
                         *ret = PIDREF_MAKE_FROM_PID(pid);
                         return 1;
                 }