Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0-only
2 : : #include "cgroup-internal.h"
3 : :
4 : : #include <linux/ctype.h>
5 : : #include <linux/kmod.h>
6 : : #include <linux/sort.h>
7 : : #include <linux/delay.h>
8 : : #include <linux/mm.h>
9 : : #include <linux/sched/signal.h>
10 : : #include <linux/sched/task.h>
11 : : #include <linux/magic.h>
12 : : #include <linux/slab.h>
13 : : #include <linux/vmalloc.h>
14 : : #include <linux/delayacct.h>
15 : : #include <linux/pid_namespace.h>
16 : : #include <linux/cgroupstats.h>
17 : : #include <linux/fs_parser.h>
18 : :
19 : : #include <trace/events/cgroup.h>
20 : :
21 : : /*
22 : : * pidlists linger the following amount before being destroyed. The goal
23 : : * is avoiding frequent destruction in the middle of consecutive read calls
24 : : * Expiring in the middle is a performance problem not a correctness one.
25 : : * 1 sec should be enough.
26 : : */
27 : : #define CGROUP_PIDLIST_DESTROY_DELAY HZ
28 : :
29 : : /* Controllers blocked by the commandline in v1 */
30 : : static u16 cgroup_no_v1_mask;
31 : :
32 : : /* disable named v1 mounts */
33 : : static bool cgroup_no_v1_named;
34 : :
35 : : /*
36 : : * pidlist destructions need to be flushed on cgroup destruction. Use a
37 : : * separate workqueue as flush domain.
38 : : */
39 : : static struct workqueue_struct *cgroup_pidlist_destroy_wq;
40 : :
41 : : /*
42 : : * Protects cgroup_subsys->release_agent_path. Modifying it also requires
43 : : * cgroup_mutex. Reading requires either cgroup_mutex or this spinlock.
44 : : */
45 : : static DEFINE_SPINLOCK(release_agent_path_lock);
46 : :
47 : 1560 : bool cgroup1_ssid_disabled(int ssid)
48 : : {
49 : 1560 : return cgroup_no_v1_mask & (1 << ssid);
50 : : }
51 : :
52 : : /**
53 : : * cgroup_attach_task_all - attach task 'tsk' to all cgroups of task 'from'
54 : : * @from: attach to all cgroups of a given task
55 : : * @tsk: the task to be attached
56 : : */
57 : 0 : int cgroup_attach_task_all(struct task_struct *from, struct task_struct *tsk)
58 : : {
59 : 0 : struct cgroup_root *root;
60 : 0 : int retval = 0;
61 : :
62 : 0 : mutex_lock(&cgroup_mutex);
63 : 0 : percpu_down_write(&cgroup_threadgroup_rwsem);
64 [ # # ]: 0 : for_each_root(root) {
65 : 0 : struct cgroup *from_cgrp;
66 : :
67 [ # # ]: 0 : if (root == &cgrp_dfl_root)
68 : 0 : continue;
69 : :
70 : 0 : spin_lock_irq(&css_set_lock);
71 : 0 : from_cgrp = task_cgroup_from_root(from, root);
72 : 0 : spin_unlock_irq(&css_set_lock);
73 : :
74 : 0 : retval = cgroup_attach_task(from_cgrp, tsk, false);
75 [ # # ]: 0 : if (retval)
76 : : break;
77 : : }
78 : 0 : percpu_up_write(&cgroup_threadgroup_rwsem);
79 : 0 : mutex_unlock(&cgroup_mutex);
80 : :
81 : 0 : return retval;
82 : : }
83 : : EXPORT_SYMBOL_GPL(cgroup_attach_task_all);
84 : :
85 : : /**
86 : : * cgroup_trasnsfer_tasks - move tasks from one cgroup to another
87 : : * @to: cgroup to which the tasks will be moved
88 : : * @from: cgroup in which the tasks currently reside
89 : : *
90 : : * Locking rules between cgroup_post_fork() and the migration path
91 : : * guarantee that, if a task is forking while being migrated, the new child
92 : : * is guaranteed to be either visible in the source cgroup after the
93 : : * parent's migration is complete or put into the target cgroup. No task
94 : : * can slip out of migration through forking.
95 : : */
96 : 0 : int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from)
97 : : {
98 : 0 : DEFINE_CGROUP_MGCTX(mgctx);
99 : 0 : struct cgrp_cset_link *link;
100 : 0 : struct css_task_iter it;
101 : 0 : struct task_struct *task;
102 : 0 : int ret;
103 : :
104 [ # # ]: 0 : if (cgroup_on_dfl(to))
105 : : return -EINVAL;
106 : :
107 : 0 : ret = cgroup_migrate_vet_dst(to);
108 [ # # ]: 0 : if (ret)
109 : : return ret;
110 : :
111 : 0 : mutex_lock(&cgroup_mutex);
112 : :
113 : 0 : percpu_down_write(&cgroup_threadgroup_rwsem);
114 : :
115 : : /* all tasks in @from are being moved, all csets are source */
116 : 0 : spin_lock_irq(&css_set_lock);
117 [ # # ]: 0 : list_for_each_entry(link, &from->cset_links, cset_link)
118 : 0 : cgroup_migrate_add_src(link->cset, to, &mgctx);
119 : 0 : spin_unlock_irq(&css_set_lock);
120 : :
121 : 0 : ret = cgroup_migrate_prepare_dst(&mgctx);
122 [ # # ]: 0 : if (ret)
123 : 0 : goto out_err;
124 : :
125 : : /*
126 : : * Migrate tasks one-by-one until @from is empty. This fails iff
127 : : * ->can_attach() fails.
128 : : */
129 : 0 : do {
130 : 0 : css_task_iter_start(&from->self, 0, &it);
131 : :
132 : 0 : do {
133 : 0 : task = css_task_iter_next(&it);
134 [ # # # # ]: 0 : } while (task && (task->flags & PF_EXITING));
135 : :
136 [ # # ]: 0 : if (task)
137 : 0 : get_task_struct(task);
138 : 0 : css_task_iter_end(&it);
139 : :
140 [ # # ]: 0 : if (task) {
141 : 0 : ret = cgroup_migrate(task, false, &mgctx);
142 [ # # ]: 0 : if (!ret)
143 [ # # ]: 0 : TRACE_CGROUP_PATH(transfer_tasks, to, task, false);
144 : 0 : put_task_struct(task);
145 : : }
146 [ # # ]: 0 : } while (task && !ret);
147 : 0 : out_err:
148 : 0 : cgroup_migrate_finish(&mgctx);
149 : 0 : percpu_up_write(&cgroup_threadgroup_rwsem);
150 : 0 : mutex_unlock(&cgroup_mutex);
151 : 0 : return ret;
152 : : }
153 : :
154 : : /*
155 : : * Stuff for reading the 'tasks'/'procs' files.
156 : : *
157 : : * Reading this file can return large amounts of data if a cgroup has
158 : : * *lots* of attached tasks. So it may need several calls to read(),
159 : : * but we cannot guarantee that the information we produce is correct
160 : : * unless we produce it entirely atomically.
161 : : *
162 : : */
163 : :
164 : : /* which pidlist file are we talking about? */
165 : : enum cgroup_filetype {
166 : : CGROUP_FILE_PROCS,
167 : : CGROUP_FILE_TASKS,
168 : : };
169 : :
170 : : /*
171 : : * A pidlist is a list of pids that virtually represents the contents of one
172 : : * of the cgroup files ("procs" or "tasks"). We keep a list of such pidlists,
173 : : * a pair (one each for procs, tasks) for each pid namespace that's relevant
174 : : * to the cgroup.
175 : : */
176 : : struct cgroup_pidlist {
177 : : /*
178 : : * used to find which pidlist is wanted. doesn't change as long as
179 : : * this particular list stays in the list.
180 : : */
181 : : struct { enum cgroup_filetype type; struct pid_namespace *ns; } key;
182 : : /* array of xids */
183 : : pid_t *list;
184 : : /* how many elements the above list has */
185 : : int length;
186 : : /* each of these stored in a list by its cgroup */
187 : : struct list_head links;
188 : : /* pointer to the cgroup we belong to, for list removal purposes */
189 : : struct cgroup *owner;
190 : : /* for delayed destruction */
191 : : struct delayed_work destroy_dwork;
192 : : };
193 : :
194 : : /*
195 : : * Used to destroy all pidlists lingering waiting for destroy timer. None
196 : : * should be left afterwards.
197 : : */
198 : 2184 : void cgroup1_pidlist_destroy_all(struct cgroup *cgrp)
199 : : {
200 : 2184 : struct cgroup_pidlist *l, *tmp_l;
201 : :
202 : 2184 : mutex_lock(&cgrp->pidlist_mutex);
203 [ - + ]: 2184 : list_for_each_entry_safe(l, tmp_l, &cgrp->pidlists, links)
204 : 0 : mod_delayed_work(cgroup_pidlist_destroy_wq, &l->destroy_dwork, 0);
205 : 2184 : mutex_unlock(&cgrp->pidlist_mutex);
206 : :
207 : 2184 : flush_workqueue(cgroup_pidlist_destroy_wq);
208 [ - + ]: 2184 : BUG_ON(!list_empty(&cgrp->pidlists));
209 : 2184 : }
210 : :
211 : 0 : static void cgroup_pidlist_destroy_work_fn(struct work_struct *work)
212 : : {
213 : 0 : struct delayed_work *dwork = to_delayed_work(work);
214 : 0 : struct cgroup_pidlist *l = container_of(dwork, struct cgroup_pidlist,
215 : : destroy_dwork);
216 : 0 : struct cgroup_pidlist *tofree = NULL;
217 : :
218 : 0 : mutex_lock(&l->owner->pidlist_mutex);
219 : :
220 : : /*
221 : : * Destroy iff we didn't get queued again. The state won't change
222 : : * as destroy_dwork can only be queued while locked.
223 : : */
224 [ # # ]: 0 : if (!delayed_work_pending(dwork)) {
225 : 0 : list_del(&l->links);
226 : 0 : kvfree(l->list);
227 : 0 : put_pid_ns(l->key.ns);
228 : 0 : tofree = l;
229 : : }
230 : :
231 : 0 : mutex_unlock(&l->owner->pidlist_mutex);
232 : 0 : kfree(tofree);
233 : 0 : }
234 : :
235 : : /*
236 : : * pidlist_uniq - given a kmalloc()ed list, strip out all duplicate entries
237 : : * Returns the number of unique elements.
238 : : */
239 : 0 : static int pidlist_uniq(pid_t *list, int length)
240 : : {
241 : 0 : int src, dest = 1;
242 : :
243 : : /*
244 : : * we presume the 0th element is unique, so i starts at 1. trivial
245 : : * edge cases first; no work needs to be done for either
246 : : */
247 [ # # ]: 0 : if (length == 0 || length == 1)
248 : : return length;
249 : : /* src and dest walk down the list; dest counts unique elements */
250 [ # # ]: 0 : for (src = 1; src < length; src++) {
251 : : /* find next unique element */
252 [ # # ]: 0 : while (list[src] == list[src-1]) {
253 : 0 : src++;
254 [ # # ]: 0 : if (src == length)
255 : 0 : goto after;
256 : : }
257 : : /* dest always points to where the next unique element goes */
258 : 0 : list[dest] = list[src];
259 : 0 : dest++;
260 : : }
261 : 0 : after:
262 : : return dest;
263 : : }
264 : :
265 : : /*
266 : : * The two pid files - task and cgroup.procs - guaranteed that the result
267 : : * is sorted, which forced this whole pidlist fiasco. As pid order is
268 : : * different per namespace, each namespace needs differently sorted list,
269 : : * making it impossible to use, for example, single rbtree of member tasks
270 : : * sorted by task pointer. As pidlists can be fairly large, allocating one
271 : : * per open file is dangerous, so cgroup had to implement shared pool of
272 : : * pidlists keyed by cgroup and namespace.
273 : : */
274 : 0 : static int cmppid(const void *a, const void *b)
275 : : {
276 : 0 : return *(pid_t *)a - *(pid_t *)b;
277 : : }
278 : :
279 : 0 : static struct cgroup_pidlist *cgroup_pidlist_find(struct cgroup *cgrp,
280 : : enum cgroup_filetype type)
281 : : {
282 : 0 : struct cgroup_pidlist *l;
283 : : /* don't need task_nsproxy() if we're looking at ourself */
284 : 0 : struct pid_namespace *ns = task_active_pid_ns(current);
285 : :
286 : 0 : lockdep_assert_held(&cgrp->pidlist_mutex);
287 : :
288 [ # # ]: 0 : list_for_each_entry(l, &cgrp->pidlists, links)
289 [ # # # # ]: 0 : if (l->key.type == type && l->key.ns == ns)
290 : 0 : return l;
291 : : return NULL;
292 : : }
293 : :
294 : : /*
295 : : * find the appropriate pidlist for our purpose (given procs vs tasks)
296 : : * returns with the lock on that pidlist already held, and takes care
297 : : * of the use count, or returns NULL with no locks held if we're out of
298 : : * memory.
299 : : */
300 : 0 : static struct cgroup_pidlist *cgroup_pidlist_find_create(struct cgroup *cgrp,
301 : : enum cgroup_filetype type)
302 : : {
303 : 0 : struct cgroup_pidlist *l;
304 : :
305 : 0 : lockdep_assert_held(&cgrp->pidlist_mutex);
306 : :
307 : 0 : l = cgroup_pidlist_find(cgrp, type);
308 [ # # ]: 0 : if (l)
309 : : return l;
310 : :
311 : : /* entry not found; create a new one */
312 : 0 : l = kzalloc(sizeof(struct cgroup_pidlist), GFP_KERNEL);
313 [ # # ]: 0 : if (!l)
314 : : return l;
315 : :
316 : 0 : INIT_DELAYED_WORK(&l->destroy_dwork, cgroup_pidlist_destroy_work_fn);
317 : 0 : l->key.type = type;
318 : : /* don't need task_nsproxy() if we're looking at ourself */
319 : 0 : l->key.ns = get_pid_ns(task_active_pid_ns(current));
320 : 0 : l->owner = cgrp;
321 : 0 : list_add(&l->links, &cgrp->pidlists);
322 : 0 : return l;
323 : : }
324 : :
325 : : /*
326 : : * Load a cgroup's pidarray with either procs' tgids or tasks' pids
327 : : */
328 : 0 : static int pidlist_array_load(struct cgroup *cgrp, enum cgroup_filetype type,
329 : : struct cgroup_pidlist **lp)
330 : : {
331 : 0 : pid_t *array;
332 : 0 : int length;
333 : 0 : int pid, n = 0; /* used for populating the array */
334 : 0 : struct css_task_iter it;
335 : 0 : struct task_struct *tsk;
336 : 0 : struct cgroup_pidlist *l;
337 : :
338 : 0 : lockdep_assert_held(&cgrp->pidlist_mutex);
339 : :
340 : : /*
341 : : * If cgroup gets more users after we read count, we won't have
342 : : * enough space - tough. This race is indistinguishable to the
343 : : * caller from the case that the additional cgroup users didn't
344 : : * show up until sometime later on.
345 : : */
346 : 0 : length = cgroup_task_count(cgrp);
347 [ # # ]: 0 : array = kvmalloc_array(length, sizeof(pid_t), GFP_KERNEL);
348 [ # # ]: 0 : if (!array)
349 : 0 : return -ENOMEM;
350 : : /* now, populate the array */
351 : 0 : css_task_iter_start(&cgrp->self, 0, &it);
352 [ # # ]: 0 : while ((tsk = css_task_iter_next(&it))) {
353 [ # # ]: 0 : if (unlikely(n == length))
354 : : break;
355 : : /* get tgid or pid for procs or tasks file respectively */
356 [ # # ]: 0 : if (type == CGROUP_FILE_PROCS)
357 : 0 : pid = task_tgid_vnr(tsk);
358 : : else
359 : 0 : pid = task_pid_vnr(tsk);
360 [ # # ]: 0 : if (pid > 0) /* make sure to only use valid results */
361 : 0 : array[n++] = pid;
362 : : }
363 : 0 : css_task_iter_end(&it);
364 : 0 : length = n;
365 : : /* now sort & (if procs) strip out duplicates */
366 : 0 : sort(array, length, sizeof(pid_t), cmppid, NULL);
367 [ # # ]: 0 : if (type == CGROUP_FILE_PROCS)
368 : 0 : length = pidlist_uniq(array, length);
369 : :
370 : 0 : l = cgroup_pidlist_find_create(cgrp, type);
371 [ # # ]: 0 : if (!l) {
372 : 0 : kvfree(array);
373 : 0 : return -ENOMEM;
374 : : }
375 : :
376 : : /* store array, freeing old if necessary */
377 : 0 : kvfree(l->list);
378 : 0 : l->list = array;
379 : 0 : l->length = length;
380 : 0 : *lp = l;
381 : 0 : return 0;
382 : : }
383 : :
384 : : /*
385 : : * seq_file methods for the tasks/procs files. The seq_file position is the
386 : : * next pid to display; the seq_file iterator is a pointer to the pid
387 : : * in the cgroup->l->list array.
388 : : */
389 : :
390 : 0 : static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
391 : : {
392 : : /*
393 : : * Initially we receive a position value that corresponds to
394 : : * one more than the last pid shown (or 0 on the first call or
395 : : * after a seek to the start). Use a binary-search to find the
396 : : * next pid to display, if any
397 : : */
398 : 0 : struct kernfs_open_file *of = s->private;
399 : 0 : struct cgroup *cgrp = seq_css(s)->cgroup;
400 : 0 : struct cgroup_pidlist *l;
401 : 0 : enum cgroup_filetype type = seq_cft(s)->private;
402 : 0 : int index = 0, pid = *pos;
403 : 0 : int *iter, ret;
404 : :
405 : 0 : mutex_lock(&cgrp->pidlist_mutex);
406 : :
407 : : /*
408 : : * !NULL @of->priv indicates that this isn't the first start()
409 : : * after open. If the matching pidlist is around, we can use that.
410 : : * Look for it. Note that @of->priv can't be used directly. It
411 : : * could already have been destroyed.
412 : : */
413 [ # # ]: 0 : if (of->priv)
414 : 0 : of->priv = cgroup_pidlist_find(cgrp, type);
415 : :
416 : : /*
417 : : * Either this is the first start() after open or the matching
418 : : * pidlist has been destroyed inbetween. Create a new one.
419 : : */
420 [ # # ]: 0 : if (!of->priv) {
421 : 0 : ret = pidlist_array_load(cgrp, type,
422 : 0 : (struct cgroup_pidlist **)&of->priv);
423 [ # # ]: 0 : if (ret)
424 : 0 : return ERR_PTR(ret);
425 : : }
426 : 0 : l = of->priv;
427 : :
428 [ # # ]: 0 : if (pid) {
429 : 0 : int end = l->length;
430 : :
431 [ # # ]: 0 : while (index < end) {
432 : 0 : int mid = (index + end) / 2;
433 [ # # ]: 0 : if (l->list[mid] == pid) {
434 : : index = mid;
435 : : break;
436 [ # # ]: 0 : } else if (l->list[mid] <= pid)
437 : 0 : index = mid + 1;
438 : : else
439 : : end = mid;
440 : : }
441 : : }
442 : : /* If we're off the end of the array, we're done */
443 [ # # ]: 0 : if (index >= l->length)
444 : : return NULL;
445 : : /* Update the abstract position to be the actual pid that we found */
446 : 0 : iter = l->list + index;
447 : 0 : *pos = *iter;
448 : 0 : return iter;
449 : : }
450 : :
451 : 0 : static void cgroup_pidlist_stop(struct seq_file *s, void *v)
452 : : {
453 : 0 : struct kernfs_open_file *of = s->private;
454 : 0 : struct cgroup_pidlist *l = of->priv;
455 : :
456 [ # # ]: 0 : if (l)
457 : 0 : mod_delayed_work(cgroup_pidlist_destroy_wq, &l->destroy_dwork,
458 : : CGROUP_PIDLIST_DESTROY_DELAY);
459 : 0 : mutex_unlock(&seq_css(s)->cgroup->pidlist_mutex);
460 : 0 : }
461 : :
462 : 0 : static void *cgroup_pidlist_next(struct seq_file *s, void *v, loff_t *pos)
463 : : {
464 : 0 : struct kernfs_open_file *of = s->private;
465 : 0 : struct cgroup_pidlist *l = of->priv;
466 : 0 : pid_t *p = v;
467 : 0 : pid_t *end = l->list + l->length;
468 : : /*
469 : : * Advance to the next pid in the array. If this goes off the
470 : : * end, we're done
471 : : */
472 : 0 : p++;
473 [ # # ]: 0 : if (p >= end) {
474 : 0 : (*pos)++;
475 : 0 : return NULL;
476 : : } else {
477 : 0 : *pos = *p;
478 : 0 : return p;
479 : : }
480 : : }
481 : :
482 : 0 : static int cgroup_pidlist_show(struct seq_file *s, void *v)
483 : : {
484 : 0 : seq_printf(s, "%d\n", *(int *)v);
485 : :
486 : 0 : return 0;
487 : : }
488 : :
489 : 6630 : static ssize_t __cgroup1_procs_write(struct kernfs_open_file *of,
490 : : char *buf, size_t nbytes, loff_t off,
491 : : bool threadgroup)
492 : : {
493 : 6630 : struct cgroup *cgrp;
494 : 6630 : struct task_struct *task;
495 : 6630 : const struct cred *cred, *tcred;
496 : 6630 : ssize_t ret;
497 : 6630 : bool locked;
498 : :
499 : 6630 : cgrp = cgroup_kn_lock_live(of->kn, false);
500 [ + - ]: 6630 : if (!cgrp)
501 : : return -ENODEV;
502 : :
503 : 6630 : task = cgroup_procs_write_start(buf, threadgroup, &locked);
504 [ - + ]: 6630 : ret = PTR_ERR_OR_ZERO(task);
505 [ - + ]: 6630 : if (ret)
506 : 0 : goto out_unlock;
507 : :
508 : : /*
509 : : * Even if we're attaching all tasks in the thread group, we only
510 : : * need to check permissions on one of them.
511 : : */
512 : 6630 : cred = current_cred();
513 : 6630 : tcred = get_task_cred(task);
514 [ - + - - ]: 6630 : if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) &&
515 [ # # ]: 0 : !uid_eq(cred->euid, tcred->uid) &&
516 : : !uid_eq(cred->euid, tcred->suid))
517 : 0 : ret = -EACCES;
518 : 6630 : put_cred(tcred);
519 [ - + ]: 6630 : if (ret)
520 : 0 : goto out_finish;
521 : :
522 : 6630 : ret = cgroup_attach_task(cgrp, task, threadgroup);
523 : :
524 : 6630 : out_finish:
525 : 6630 : cgroup_procs_write_finish(task, locked);
526 : 6630 : out_unlock:
527 : 6630 : cgroup_kn_unlock(of->kn);
528 : :
529 [ + - ]: 6630 : return ret ?: nbytes;
530 : : }
531 : :
532 : 6630 : static ssize_t cgroup1_procs_write(struct kernfs_open_file *of,
533 : : char *buf, size_t nbytes, loff_t off)
534 : : {
535 : 6630 : return __cgroup1_procs_write(of, buf, nbytes, off, true);
536 : : }
537 : :
538 : 0 : static ssize_t cgroup1_tasks_write(struct kernfs_open_file *of,
539 : : char *buf, size_t nbytes, loff_t off)
540 : : {
541 : 0 : return __cgroup1_procs_write(of, buf, nbytes, off, false);
542 : : }
543 : :
544 : 0 : static ssize_t cgroup_release_agent_write(struct kernfs_open_file *of,
545 : : char *buf, size_t nbytes, loff_t off)
546 : : {
547 : 0 : struct cgroup *cgrp;
548 : :
549 : 0 : BUILD_BUG_ON(sizeof(cgrp->root->release_agent_path) < PATH_MAX);
550 : :
551 : 0 : cgrp = cgroup_kn_lock_live(of->kn, false);
552 [ # # ]: 0 : if (!cgrp)
553 : : return -ENODEV;
554 : 0 : spin_lock(&release_agent_path_lock);
555 : 0 : strlcpy(cgrp->root->release_agent_path, strstrip(buf),
556 : : sizeof(cgrp->root->release_agent_path));
557 : 0 : spin_unlock(&release_agent_path_lock);
558 : 0 : cgroup_kn_unlock(of->kn);
559 : 0 : return nbytes;
560 : : }
561 : :
562 : 0 : static int cgroup_release_agent_show(struct seq_file *seq, void *v)
563 : : {
564 : 0 : struct cgroup *cgrp = seq_css(seq)->cgroup;
565 : :
566 : 0 : spin_lock(&release_agent_path_lock);
567 : 0 : seq_puts(seq, cgrp->root->release_agent_path);
568 : 0 : spin_unlock(&release_agent_path_lock);
569 : 0 : seq_putc(seq, '\n');
570 : 0 : return 0;
571 : : }
572 : :
573 : 0 : static int cgroup_sane_behavior_show(struct seq_file *seq, void *v)
574 : : {
575 : 0 : seq_puts(seq, "0\n");
576 : 0 : return 0;
577 : : }
578 : :
579 : 0 : static u64 cgroup_read_notify_on_release(struct cgroup_subsys_state *css,
580 : : struct cftype *cft)
581 : : {
582 : 0 : return notify_on_release(css->cgroup);
583 : : }
584 : :
585 : 0 : static int cgroup_write_notify_on_release(struct cgroup_subsys_state *css,
586 : : struct cftype *cft, u64 val)
587 : : {
588 [ # # ]: 0 : if (val)
589 : 0 : set_bit(CGRP_NOTIFY_ON_RELEASE, &css->cgroup->flags);
590 : : else
591 : 0 : clear_bit(CGRP_NOTIFY_ON_RELEASE, &css->cgroup->flags);
592 : 0 : return 0;
593 : : }
594 : :
595 : 0 : static u64 cgroup_clone_children_read(struct cgroup_subsys_state *css,
596 : : struct cftype *cft)
597 : : {
598 : 0 : return test_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags);
599 : : }
600 : :
601 : 0 : static int cgroup_clone_children_write(struct cgroup_subsys_state *css,
602 : : struct cftype *cft, u64 val)
603 : : {
604 [ # # ]: 0 : if (val)
605 : 0 : set_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags);
606 : : else
607 : 0 : clear_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags);
608 : 0 : return 0;
609 : : }
610 : :
611 : : /* cgroup core interface files for the legacy hierarchies */
612 : : struct cftype cgroup1_base_files[] = {
613 : : {
614 : : .name = "cgroup.procs",
615 : : .seq_start = cgroup_pidlist_start,
616 : : .seq_next = cgroup_pidlist_next,
617 : : .seq_stop = cgroup_pidlist_stop,
618 : : .seq_show = cgroup_pidlist_show,
619 : : .private = CGROUP_FILE_PROCS,
620 : : .write = cgroup1_procs_write,
621 : : },
622 : : {
623 : : .name = "cgroup.clone_children",
624 : : .read_u64 = cgroup_clone_children_read,
625 : : .write_u64 = cgroup_clone_children_write,
626 : : },
627 : : {
628 : : .name = "cgroup.sane_behavior",
629 : : .flags = CFTYPE_ONLY_ON_ROOT,
630 : : .seq_show = cgroup_sane_behavior_show,
631 : : },
632 : : {
633 : : .name = "tasks",
634 : : .seq_start = cgroup_pidlist_start,
635 : : .seq_next = cgroup_pidlist_next,
636 : : .seq_stop = cgroup_pidlist_stop,
637 : : .seq_show = cgroup_pidlist_show,
638 : : .private = CGROUP_FILE_TASKS,
639 : : .write = cgroup1_tasks_write,
640 : : },
641 : : {
642 : : .name = "notify_on_release",
643 : : .read_u64 = cgroup_read_notify_on_release,
644 : : .write_u64 = cgroup_write_notify_on_release,
645 : : },
646 : : {
647 : : .name = "release_agent",
648 : : .flags = CFTYPE_ONLY_ON_ROOT,
649 : : .seq_show = cgroup_release_agent_show,
650 : : .write = cgroup_release_agent_write,
651 : : .max_write_len = PATH_MAX - 1,
652 : : },
653 : : { } /* terminate */
654 : : };
655 : :
656 : : /* Display information about each subsystem and each hierarchy */
657 : 78 : int proc_cgroupstats_show(struct seq_file *m, void *v)
658 : : {
659 : 78 : struct cgroup_subsys *ss;
660 : 78 : int i;
661 : :
662 : 78 : seq_puts(m, "#subsys_name\thierarchy\tnum_cgroups\tenabled\n");
663 : : /*
664 : : * ideally we don't want subsystems moving around while we do this.
665 : : * cgroup_mutex is also necessary to guarantee an atomic snapshot of
666 : : * subsys/hierarchy state.
667 : : */
668 : 78 : mutex_lock(&cgroup_mutex);
669 : :
670 [ + + ]: 468 : for_each_subsys(ss, i)
671 : 936 : seq_printf(m, "%s\t%d\t%d\t%d\n",
672 : 312 : ss->legacy_name, ss->root->hierarchy_id,
673 : 312 : atomic_read(&ss->root->nr_cgrps),
674 : 312 : cgroup_ssid_enabled(i));
675 : :
676 : 78 : mutex_unlock(&cgroup_mutex);
677 : 78 : return 0;
678 : : }
679 : :
680 : : /**
681 : : * cgroupstats_build - build and fill cgroupstats
682 : : * @stats: cgroupstats to fill information into
683 : : * @dentry: A dentry entry belonging to the cgroup for which stats have
684 : : * been requested.
685 : : *
686 : : * Build and fill cgroupstats so that taskstats can export it to user
687 : : * space.
688 : : */
689 : 0 : int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry)
690 : : {
691 : 0 : struct kernfs_node *kn = kernfs_node_from_dentry(dentry);
692 : 0 : struct cgroup *cgrp;
693 : 0 : struct css_task_iter it;
694 : 0 : struct task_struct *tsk;
695 : :
696 : : /* it should be kernfs_node belonging to cgroupfs and is a directory */
697 [ # # # # : 0 : if (dentry->d_sb->s_type != &cgroup_fs_type || !kn ||
# # ]
698 [ # # ]: 0 : kernfs_type(kn) != KERNFS_DIR)
699 : : return -EINVAL;
700 : :
701 : 0 : mutex_lock(&cgroup_mutex);
702 : :
703 : : /*
704 : : * We aren't being called from kernfs and there's no guarantee on
705 : : * @kn->priv's validity. For this and css_tryget_online_from_dir(),
706 : : * @kn->priv is RCU safe. Let's do the RCU dancing.
707 : : */
708 : 0 : rcu_read_lock();
709 [ # # ]: 0 : cgrp = rcu_dereference(*(void __rcu __force **)&kn->priv);
710 [ # # # # ]: 0 : if (!cgrp || cgroup_is_dead(cgrp)) {
711 : 0 : rcu_read_unlock();
712 : 0 : mutex_unlock(&cgroup_mutex);
713 : 0 : return -ENOENT;
714 : : }
715 : 0 : rcu_read_unlock();
716 : :
717 : 0 : css_task_iter_start(&cgrp->self, 0, &it);
718 [ # # ]: 0 : while ((tsk = css_task_iter_next(&it))) {
719 [ # # # # : 0 : switch (tsk->state) {
# ]
720 : 0 : case TASK_RUNNING:
721 : 0 : stats->nr_running++;
722 : 0 : break;
723 : 0 : case TASK_INTERRUPTIBLE:
724 : 0 : stats->nr_sleeping++;
725 : 0 : break;
726 : 0 : case TASK_UNINTERRUPTIBLE:
727 : 0 : stats->nr_uninterruptible++;
728 : 0 : break;
729 : 0 : case TASK_STOPPED:
730 : 0 : stats->nr_stopped++;
731 : 0 : break;
732 : : default:
733 [ # # # # ]: 0 : if (delayacct_is_task_waiting_on_io(tsk))
734 : 0 : stats->nr_io_wait++;
735 : : break;
736 : : }
737 : : }
738 : 0 : css_task_iter_end(&it);
739 : :
740 : 0 : mutex_unlock(&cgroup_mutex);
741 : 0 : return 0;
742 : : }
743 : :
744 : 10568 : void cgroup1_check_for_release(struct cgroup *cgrp)
745 : : {
746 [ - + - - : 10568 : if (notify_on_release(cgrp) && !cgroup_is_populated(cgrp) &&
- - ]
747 [ # # ]: 0 : !css_has_online_children(&cgrp->self) && !cgroup_is_dead(cgrp))
748 : 0 : schedule_work(&cgrp->release_agent_work);
749 : 10568 : }
750 : :
751 : : /*
752 : : * Notify userspace when a cgroup is released, by running the
753 : : * configured release agent with the name of the cgroup (path
754 : : * relative to the root of cgroup file system) as the argument.
755 : : *
756 : : * Most likely, this user command will try to rmdir this cgroup.
757 : : *
758 : : * This races with the possibility that some other task will be
759 : : * attached to this cgroup before it is removed, or that some other
760 : : * user task will 'mkdir' a child cgroup of this cgroup. That's ok.
761 : : * The presumed 'rmdir' will fail quietly if this cgroup is no longer
762 : : * unused, and this cgroup will be reprieved from its death sentence,
763 : : * to continue to serve a useful existence. Next time it's released,
764 : : * we will get notified again, if it still has 'notify_on_release' set.
765 : : *
766 : : * The final arg to call_usermodehelper() is UMH_WAIT_EXEC, which
767 : : * means only wait until the task is successfully execve()'d. The
768 : : * separate release agent task is forked by call_usermodehelper(),
769 : : * then control in this thread returns here, without waiting for the
770 : : * release agent task. We don't bother to wait because the caller of
771 : : * this routine has no use for the exit status of the release agent
772 : : * task, so no sense holding our caller up for that.
773 : : */
774 : 0 : void cgroup1_release_agent(struct work_struct *work)
775 : : {
776 : 0 : struct cgroup *cgrp =
777 : 0 : container_of(work, struct cgroup, release_agent_work);
778 : 0 : char *pathbuf = NULL, *agentbuf = NULL;
779 : 0 : char *argv[3], *envp[3];
780 : 0 : int ret;
781 : :
782 : 0 : mutex_lock(&cgroup_mutex);
783 : :
784 : 0 : pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
785 : 0 : agentbuf = kstrdup(cgrp->root->release_agent_path, GFP_KERNEL);
786 [ # # # # ]: 0 : if (!pathbuf || !agentbuf || !strlen(agentbuf))
787 : 0 : goto out;
788 : :
789 : 0 : spin_lock_irq(&css_set_lock);
790 : 0 : ret = cgroup_path_ns_locked(cgrp, pathbuf, PATH_MAX, &init_cgroup_ns);
791 : 0 : spin_unlock_irq(&css_set_lock);
792 [ # # ]: 0 : if (ret < 0 || ret >= PATH_MAX)
793 : 0 : goto out;
794 : :
795 : 0 : argv[0] = agentbuf;
796 : 0 : argv[1] = pathbuf;
797 : 0 : argv[2] = NULL;
798 : :
799 : : /* minimal command environment */
800 : 0 : envp[0] = "HOME=/";
801 : 0 : envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
802 : 0 : envp[2] = NULL;
803 : :
804 : 0 : mutex_unlock(&cgroup_mutex);
805 : 0 : call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
806 : 0 : goto out_free;
807 : 0 : out:
808 : 0 : mutex_unlock(&cgroup_mutex);
809 : 0 : out_free:
810 : 0 : kfree(agentbuf);
811 : 0 : kfree(pathbuf);
812 : 0 : }
813 : :
814 : : /*
815 : : * cgroup_rename - Only allow simple rename of directories in place.
816 : : */
817 : 0 : static int cgroup1_rename(struct kernfs_node *kn, struct kernfs_node *new_parent,
818 : : const char *new_name_str)
819 : : {
820 : 0 : struct cgroup *cgrp = kn->priv;
821 : 0 : int ret;
822 : :
823 [ # # ]: 0 : if (kernfs_type(kn) != KERNFS_DIR)
824 : : return -ENOTDIR;
825 [ # # ]: 0 : if (kn->parent != new_parent)
826 : : return -EIO;
827 : :
828 : : /*
829 : : * We're gonna grab cgroup_mutex which nests outside kernfs
830 : : * active_ref. kernfs_rename() doesn't require active_ref
831 : : * protection. Break them before grabbing cgroup_mutex.
832 : : */
833 : 0 : kernfs_break_active_protection(new_parent);
834 : 0 : kernfs_break_active_protection(kn);
835 : :
836 : 0 : mutex_lock(&cgroup_mutex);
837 : :
838 : 0 : ret = kernfs_rename(kn, new_parent, new_name_str);
839 [ # # ]: 0 : if (!ret)
840 [ # # ]: 0 : TRACE_CGROUP_PATH(rename, cgrp);
841 : :
842 : 0 : mutex_unlock(&cgroup_mutex);
843 : :
844 : 0 : kernfs_unbreak_active_protection(kn);
845 : 0 : kernfs_unbreak_active_protection(new_parent);
846 : 0 : return ret;
847 : : }
848 : :
849 : 35040 : static int cgroup1_show_options(struct seq_file *seq, struct kernfs_root *kf_root)
850 : : {
851 : 35040 : struct cgroup_root *root = cgroup_root_from_kf(kf_root);
852 : 35040 : struct cgroup_subsys *ss;
853 : 35040 : int ssid;
854 : :
855 [ + + ]: 210240 : for_each_subsys(ss, ssid)
856 [ + + ]: 140160 : if (root->subsys_mask & (1 << ssid))
857 : 34801 : seq_show_option(seq, ss->legacy_name, NULL);
858 [ - + ]: 35040 : if (root->flags & CGRP_ROOT_NOPREFIX)
859 : 0 : seq_puts(seq, ",noprefix");
860 [ + + ]: 35040 : if (root->flags & CGRP_ROOT_XATTR)
861 : 8970 : seq_puts(seq, ",xattr");
862 [ - + ]: 35040 : if (root->flags & CGRP_ROOT_CPUSET_V2_MODE)
863 : 0 : seq_puts(seq, ",cpuset_v2_mode");
864 : :
865 : 35040 : spin_lock(&release_agent_path_lock);
866 [ - + ]: 35040 : if (strlen(root->release_agent_path))
867 : 0 : seq_show_option(seq, "release_agent",
868 : 0 : root->release_agent_path);
869 : 35040 : spin_unlock(&release_agent_path_lock);
870 : :
871 [ - + ]: 35040 : if (test_bit(CGRP_CPUSET_CLONE_CHILDREN, &root->cgrp.flags))
872 : 0 : seq_puts(seq, ",clone_children");
873 [ + + ]: 35040 : if (strlen(root->name))
874 : 8970 : seq_show_option(seq, "name", root->name);
875 : 35040 : return 0;
876 : : }
877 : :
878 : : enum cgroup1_param {
879 : : Opt_all,
880 : : Opt_clone_children,
881 : : Opt_cpuset_v2_mode,
882 : : Opt_name,
883 : : Opt_none,
884 : : Opt_noprefix,
885 : : Opt_release_agent,
886 : : Opt_xattr,
887 : : };
888 : :
889 : : const struct fs_parameter_spec cgroup1_fs_parameters[] = {
890 : : fsparam_flag ("all", Opt_all),
891 : : fsparam_flag ("clone_children", Opt_clone_children),
892 : : fsparam_flag ("cpuset_v2_mode", Opt_cpuset_v2_mode),
893 : : fsparam_string("name", Opt_name),
894 : : fsparam_flag ("none", Opt_none),
895 : : fsparam_flag ("noprefix", Opt_noprefix),
896 : : fsparam_string("release_agent", Opt_release_agent),
897 : : fsparam_flag ("xattr", Opt_xattr),
898 : : {}
899 : : };
900 : :
901 : 858 : int cgroup1_parse_param(struct fs_context *fc, struct fs_parameter *param)
902 : : {
903 : 858 : struct cgroup_fs_context *ctx = cgroup_fc2context(fc);
904 : 858 : struct cgroup_subsys *ss;
905 : 858 : struct fs_parse_result result;
906 : 858 : int opt, i;
907 : :
908 : 858 : opt = fs_parse(fc, cgroup1_fs_parameters, param, &result);
909 [ + + ]: 858 : if (opt == -ENOPARAM) {
910 [ + + ]: 624 : if (strcmp(param->key, "source") == 0) {
911 : 312 : fc->source = param->string;
912 : 312 : param->string = NULL;
913 : 312 : return 0;
914 : : }
915 [ + - ]: 780 : for_each_subsys(ss, i) {
916 [ + + ]: 780 : if (strcmp(param->key, ss->legacy_name))
917 : 468 : continue;
918 : 312 : ctx->subsys_mask |= (1 << i);
919 : 312 : return 0;
920 : : }
921 : 0 : return invalfc(fc, "Unknown subsys name '%s'", param->key);
922 : : }
923 [ + - ]: 234 : if (opt < 0)
924 : : return opt;
925 : :
926 [ + - - - : 234 : switch (opt) {
- + - +
- ]
927 : 78 : case Opt_none:
928 : : /* Explicitly have no subsystems */
929 : 78 : ctx->none = true;
930 : 78 : break;
931 : 0 : case Opt_all:
932 : 0 : ctx->all_ss = true;
933 : 0 : break;
934 : 0 : case Opt_noprefix:
935 : 0 : ctx->flags |= CGRP_ROOT_NOPREFIX;
936 : 0 : break;
937 : 0 : case Opt_clone_children:
938 : 0 : ctx->cpuset_clone_children = true;
939 : 0 : break;
940 : 0 : case Opt_cpuset_v2_mode:
941 : 0 : ctx->flags |= CGRP_ROOT_CPUSET_V2_MODE;
942 : 0 : break;
943 : 78 : case Opt_xattr:
944 : 78 : ctx->flags |= CGRP_ROOT_XATTR;
945 : 78 : break;
946 : 0 : case Opt_release_agent:
947 : : /* Specifying two release agents is forbidden */
948 [ # # ]: 0 : if (ctx->release_agent)
949 : 0 : return invalfc(fc, "release_agent respecified");
950 : 0 : ctx->release_agent = param->string;
951 : 0 : param->string = NULL;
952 : 0 : break;
953 : 78 : case Opt_name:
954 : : /* blocked by boot param? */
955 [ + - ]: 78 : if (cgroup_no_v1_named)
956 : : return -ENOENT;
957 : : /* Can't specify an empty name */
958 [ - + ]: 78 : if (!param->size)
959 : 0 : return invalfc(fc, "Empty name");
960 [ - + ]: 78 : if (param->size > MAX_CGROUP_ROOT_NAMELEN - 1)
961 : 0 : return invalfc(fc, "Name too long");
962 : : /* Must match [\w.-]+ */
963 [ + + ]: 624 : for (i = 0; i < param->size; i++) {
964 : 546 : char c = param->string[i];
965 [ + - ]: 546 : if (isalnum(c))
966 : 546 : continue;
967 [ # # ]: 0 : if ((c == '.') || (c == '-') || (c == '_'))
968 : 0 : continue;
969 : 0 : return invalfc(fc, "Invalid name");
970 : : }
971 : : /* Specifying two names is forbidden */
972 [ - + ]: 78 : if (ctx->name)
973 : 0 : return invalfc(fc, "name respecified");
974 : 78 : ctx->name = param->string;
975 : 78 : param->string = NULL;
976 : 78 : break;
977 : : }
978 : : return 0;
979 : : }
980 : :
981 : 312 : static int check_cgroupfs_options(struct fs_context *fc)
982 : : {
983 : 312 : struct cgroup_fs_context *ctx = cgroup_fc2context(fc);
984 : 312 : u16 mask = U16_MAX;
985 : 312 : u16 enabled = 0;
986 : 312 : struct cgroup_subsys *ss;
987 : 312 : int i;
988 : :
989 : : #ifdef CONFIG_CPUSETS
990 : 312 : mask = ~((u16)1 << cpuset_cgrp_id);
991 : : #endif
992 [ + + ]: 1560 : for_each_subsys(ss, i)
993 [ + - + - ]: 1248 : if (cgroup_ssid_enabled(i) && !cgroup1_ssid_disabled(i))
994 : 1248 : enabled |= 1 << i;
995 : :
996 : 312 : ctx->subsys_mask &= enabled;
997 : :
998 : : /*
999 : : * In absense of 'none', 'name=' or subsystem name options,
1000 : : * let's default to 'all'.
1001 : : */
1002 [ + + - + : 312 : if (!ctx->subsys_mask && !ctx->none && !ctx->name)
- - ]
1003 : 0 : ctx->all_ss = true;
1004 : :
1005 [ - + ]: 312 : if (ctx->all_ss) {
1006 : : /* Mutually exclusive option 'all' + subsystem name */
1007 [ # # ]: 0 : if (ctx->subsys_mask)
1008 : 0 : return invalfc(fc, "subsys name conflicts with all");
1009 : : /* 'all' => select all the subsystems */
1010 : 0 : ctx->subsys_mask = enabled;
1011 : : }
1012 : :
1013 : : /*
1014 : : * We either have to specify by name or by subsystems. (So all
1015 : : * empty hierarchies must have a name).
1016 : : */
1017 [ + + - + ]: 312 : if (!ctx->subsys_mask && !ctx->name)
1018 : 0 : return invalfc(fc, "Need name or subsystem set");
1019 : :
1020 : : /*
1021 : : * Option noprefix was introduced just for backward compatibility
1022 : : * with the old cpuset, so we allow noprefix only if mounting just
1023 : : * the cpuset subsystem.
1024 : : */
1025 [ - + - - ]: 312 : if ((ctx->flags & CGRP_ROOT_NOPREFIX) && (ctx->subsys_mask & mask))
1026 : 0 : return invalfc(fc, "noprefix used incorrectly");
1027 : :
1028 : : /* Can't specify "none" and some subsystems */
1029 [ + + - + ]: 312 : if (ctx->subsys_mask && ctx->none)
1030 : 0 : return invalfc(fc, "none used incorrectly");
1031 : :
1032 : : return 0;
1033 : : }
1034 : :
1035 : 0 : int cgroup1_reconfigure(struct fs_context *fc)
1036 : : {
1037 : 0 : struct cgroup_fs_context *ctx = cgroup_fc2context(fc);
1038 : 0 : struct kernfs_root *kf_root = kernfs_root_from_sb(fc->root->d_sb);
1039 : 0 : struct cgroup_root *root = cgroup_root_from_kf(kf_root);
1040 : 0 : int ret = 0;
1041 : 0 : u16 added_mask, removed_mask;
1042 : :
1043 : 0 : cgroup_lock_and_drain_offline(&cgrp_dfl_root.cgrp);
1044 : :
1045 : : /* See what subsystems are wanted */
1046 : 0 : ret = check_cgroupfs_options(fc);
1047 [ # # ]: 0 : if (ret)
1048 : 0 : goto out_unlock;
1049 : :
1050 [ # # # # ]: 0 : if (ctx->subsys_mask != root->subsys_mask || ctx->release_agent)
1051 : 0 : pr_warn("option changes via remount are deprecated (pid=%d comm=%s)\n",
1052 : : task_tgid_nr(current), current->comm);
1053 : :
1054 : 0 : added_mask = ctx->subsys_mask & ~root->subsys_mask;
1055 : 0 : removed_mask = root->subsys_mask & ~ctx->subsys_mask;
1056 : :
1057 : : /* Don't allow flags or name to change at remount */
1058 [ # # ]: 0 : if ((ctx->flags ^ root->flags) ||
1059 [ # # # # ]: 0 : (ctx->name && strcmp(ctx->name, root->name))) {
1060 [ # # ]: 0 : errorfc(fc, "option or name mismatch, new: 0x%x \"%s\", old: 0x%x \"%s\"",
1061 : : ctx->flags, ctx->name ?: "", root->flags, root->name);
1062 : 0 : ret = -EINVAL;
1063 : 0 : goto out_unlock;
1064 : : }
1065 : :
1066 : : /* remounting is not allowed for populated hierarchies */
1067 [ # # ]: 0 : if (!list_empty(&root->cgrp.self.children)) {
1068 : 0 : ret = -EBUSY;
1069 : 0 : goto out_unlock;
1070 : : }
1071 : :
1072 : 0 : ret = rebind_subsystems(root, added_mask);
1073 [ # # ]: 0 : if (ret)
1074 : 0 : goto out_unlock;
1075 : :
1076 [ # # ]: 0 : WARN_ON(rebind_subsystems(&cgrp_dfl_root, removed_mask));
1077 : :
1078 [ # # ]: 0 : if (ctx->release_agent) {
1079 : 0 : spin_lock(&release_agent_path_lock);
1080 : 0 : strcpy(root->release_agent_path, ctx->release_agent);
1081 : 0 : spin_unlock(&release_agent_path_lock);
1082 : : }
1083 : :
1084 : 0 : trace_cgroup_remount(root);
1085 : :
1086 : 0 : out_unlock:
1087 : 0 : mutex_unlock(&cgroup_mutex);
1088 : 0 : return ret;
1089 : : }
1090 : :
1091 : : struct kernfs_syscall_ops cgroup1_kf_syscall_ops = {
1092 : : .rename = cgroup1_rename,
1093 : : .show_options = cgroup1_show_options,
1094 : : .mkdir = cgroup_mkdir,
1095 : : .rmdir = cgroup_rmdir,
1096 : : .show_path = cgroup_show_path,
1097 : : };
1098 : :
1099 : : /*
1100 : : * The guts of cgroup1 mount - find or create cgroup_root to use.
1101 : : * Called with cgroup_mutex held; returns 0 on success, -E... on
1102 : : * error and positive - in case when the candidate is busy dying.
1103 : : * On success it stashes a reference to cgroup_root into given
1104 : : * cgroup_fs_context; that reference is *NOT* counting towards the
1105 : : * cgroup_root refcount.
1106 : : */
1107 : 312 : static int cgroup1_root_to_use(struct fs_context *fc)
1108 : : {
1109 : 312 : struct cgroup_fs_context *ctx = cgroup_fc2context(fc);
1110 : 312 : struct cgroup_root *root;
1111 : 312 : struct cgroup_subsys *ss;
1112 : 312 : int i, ret;
1113 : :
1114 : : /* First find the desired set of subsystems */
1115 : 312 : ret = check_cgroupfs_options(fc);
1116 [ + - ]: 312 : if (ret)
1117 : : return ret;
1118 : :
1119 : : /*
1120 : : * Destruction of cgroup root is asynchronous, so subsystems may
1121 : : * still be dying after the previous unmount. Let's drain the
1122 : : * dying subsystems. We just need to ensure that the ones
1123 : : * unmounted previously finish dying and don't care about new ones
1124 : : * starting. Testing ref liveliness is good enough.
1125 : : */
1126 [ + + ]: 1560 : for_each_subsys(ss, i) {
1127 [ + + ]: 1248 : if (!(ctx->subsys_mask & (1 << i)) ||
1128 [ + - ]: 312 : ss->root == &cgrp_dfl_root)
1129 : 1248 : continue;
1130 : :
1131 [ # # ]: 0 : if (!percpu_ref_tryget_live(&ss->root->cgrp.self.refcnt))
1132 : : return 1; /* restart */
1133 [ # # ]: 0 : cgroup_put(&ss->root->cgrp);
1134 : : }
1135 : :
1136 [ + + ]: 1092 : for_each_root(root) {
1137 : 780 : bool name_match = false;
1138 : :
1139 [ + + ]: 780 : if (root == &cgrp_dfl_root)
1140 : 312 : continue;
1141 : :
1142 : : /*
1143 : : * If we asked for a name then it must match. Also, if
1144 : : * name matches but sybsys_mask doesn't, we should fail.
1145 : : * Remember whether name matched.
1146 : : */
1147 [ - + ]: 468 : if (ctx->name) {
1148 [ # # ]: 0 : if (strcmp(ctx->name, root->name))
1149 : 0 : continue;
1150 : : name_match = true;
1151 : : }
1152 : :
1153 : : /*
1154 : : * If we asked for subsystems (or explicitly for no
1155 : : * subsystems) then they must match.
1156 : : */
1157 [ - + - - ]: 468 : if ((ctx->subsys_mask || ctx->none) &&
1158 [ + - ]: 468 : (ctx->subsys_mask != root->subsys_mask)) {
1159 [ + - ]: 468 : if (!name_match)
1160 : 468 : continue;
1161 : : return -EBUSY;
1162 : : }
1163 : :
1164 [ # # ]: 0 : if (root->flags ^ ctx->flags)
1165 : 0 : pr_warn("new mount options do not match the existing superblock, will be ignored\n");
1166 : :
1167 : 0 : ctx->root = root;
1168 : 0 : return 0;
1169 : : }
1170 : :
1171 : : /*
1172 : : * No such thing, create a new one. name= matching without subsys
1173 : : * specification is allowed for already existing hierarchies but we
1174 : : * can't create new one without subsys specification.
1175 : : */
1176 [ + + - + ]: 312 : if (!ctx->subsys_mask && !ctx->none)
1177 : 0 : return invalfc(fc, "No subsys list or none specified");
1178 : :
1179 : : /* Hierarchies may only be created in the initial cgroup namespace. */
1180 [ + - ]: 312 : if (ctx->ns != &init_cgroup_ns)
1181 : : return -EPERM;
1182 : :
1183 : 312 : root = kzalloc(sizeof(*root), GFP_KERNEL);
1184 [ + - ]: 312 : if (!root)
1185 : : return -ENOMEM;
1186 : :
1187 : 312 : ctx->root = root;
1188 : 312 : init_cgroup_root(ctx);
1189 : :
1190 : 312 : ret = cgroup_setup_root(root, ctx->subsys_mask);
1191 [ - + ]: 312 : if (ret)
1192 : 0 : cgroup_free_root(root);
1193 : : return ret;
1194 : : }
1195 : :
1196 : 312 : int cgroup1_get_tree(struct fs_context *fc)
1197 : : {
1198 : 312 : struct cgroup_fs_context *ctx = cgroup_fc2context(fc);
1199 : 312 : int ret;
1200 : :
1201 : : /* Check if the caller has permission to mount. */
1202 [ + - ]: 312 : if (!ns_capable(ctx->ns->user_ns, CAP_SYS_ADMIN))
1203 : : return -EPERM;
1204 : :
1205 : 312 : cgroup_lock_and_drain_offline(&cgrp_dfl_root.cgrp);
1206 : :
1207 : 312 : ret = cgroup1_root_to_use(fc);
1208 [ + - - + ]: 312 : if (!ret && !percpu_ref_tryget_live(&ctx->root->cgrp.self.refcnt))
1209 : 0 : ret = 1; /* restart */
1210 : :
1211 : 312 : mutex_unlock(&cgroup_mutex);
1212 : :
1213 [ + - ]: 312 : if (!ret)
1214 : 312 : ret = cgroup_do_get_tree(fc);
1215 : :
1216 [ + - - + ]: 312 : if (!ret && percpu_ref_is_dying(&ctx->root->cgrp.self.refcnt)) {
1217 : 0 : struct super_block *sb = fc->root->d_sb;
1218 : 0 : dput(fc->root);
1219 : 0 : deactivate_locked_super(sb);
1220 : 0 : ret = 1;
1221 : : }
1222 : :
1223 [ - + ]: 312 : if (unlikely(ret > 0)) {
1224 : 0 : msleep(10);
1225 : 0 : return restart_syscall();
1226 : : }
1227 : : return ret;
1228 : : }
1229 : :
1230 : 78 : static int __init cgroup1_wq_init(void)
1231 : : {
1232 : : /*
1233 : : * Used to destroy pidlists and separate to serve as flush domain.
1234 : : * Cap @max_active to 1 too.
1235 : : */
1236 : 78 : cgroup_pidlist_destroy_wq = alloc_workqueue("cgroup_pidlist_destroy",
1237 : : 0, 1);
1238 [ - + ]: 78 : BUG_ON(!cgroup_pidlist_destroy_wq);
1239 : 78 : return 0;
1240 : : }
1241 : : core_initcall(cgroup1_wq_init);
1242 : :
1243 : 0 : static int __init cgroup_no_v1(char *str)
1244 : : {
1245 : 0 : struct cgroup_subsys *ss;
1246 : 0 : char *token;
1247 : 0 : int i;
1248 : :
1249 [ # # ]: 0 : while ((token = strsep(&str, ",")) != NULL) {
1250 [ # # ]: 0 : if (!*token)
1251 : 0 : continue;
1252 : :
1253 [ # # ]: 0 : if (!strcmp(token, "all")) {
1254 : 0 : cgroup_no_v1_mask = U16_MAX;
1255 : 0 : continue;
1256 : : }
1257 : :
1258 [ # # ]: 0 : if (!strcmp(token, "named")) {
1259 : 0 : cgroup_no_v1_named = true;
1260 : 0 : continue;
1261 : : }
1262 : :
1263 [ # # ]: 0 : for_each_subsys(ss, i) {
1264 [ # # ]: 0 : if (strcmp(token, ss->name) &&
1265 [ # # ]: 0 : strcmp(token, ss->legacy_name))
1266 : 0 : continue;
1267 : :
1268 : 0 : cgroup_no_v1_mask |= 1 << i;
1269 : : }
1270 : : }
1271 : 0 : return 1;
1272 : : }
1273 : : __setup("cgroup_no_v1=", cgroup_no_v1);
|