cgroup has to be one kernfs dir, otherwise kernel panic is caused, especially cgroup id is provide from userspace.
Unified · Split
| @@ -6049,6 +6049,9 @@ struct cgroup *cgroup_get_from_id(u64 id) · 6048 unmodified lines | ||
| 6049 | 6049 | if (!kn) |
| 6050 | 6050 | goto out; |
| 6051 | 6051 | |
| 6052 | + if (kernfs_type(kn) != KERNFS_DIR) | |
| 6053 | + goto put; | |
| 6054 | + | |
| 6052 | 6055 | rcu_read_lock(); |
| 6053 | 6056 | |
| 6054 | 6057 | cgrp = rcu_dereference(*(void __rcu __force **)&kn->priv); |
| @@ -6056,7 +6059,7 @@ struct cgroup *cgroup_get_from_id(u64 id) · 1 unmodified line | ||
| 6056 | 6059 | cgrp = NULL; |
| 6057 | 6060 | |
| 6058 | 6061 | rcu_read_unlock(); |
| 6059 | − | |
| 6062 | +put: | |
| 6060 | 6063 | kernfs_put(kn); |
| 6061 | 6064 | out: |
| 6062 | 6065 | return cgrp; |