Release 4.11 net/core/netclassid_cgroup.c
/*
* net/core/netclassid_cgroup.c Classid Cgroupfs Handling
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Authors: Thomas Graf <tgraf@suug.ch>
*/
#include <linux/slab.h>
#include <linux/cgroup.h>
#include <linux/fdtable.h>
#include <linux/sched/task.h>
#include <net/cls_cgroup.h>
#include <net/sock.h>
static inline struct cgroup_cls_state *css_cls_state(struct cgroup_subsys_state *css)
{
return css ? container_of(css, struct cgroup_cls_state, css) : NULL;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 29 | 100.00% | 1 | 100.00% |
Total | 29 | 100.00% | 1 | 100.00% |
struct cgroup_cls_state *task_cls_state(struct task_struct *p)
{
return css_cls_state(task_css_check(p, net_cls_cgrp_id,
rcu_read_lock_bh_held()));
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 21 | 80.77% | 1 | 33.33% |
Konstantin Khlebnikov | 4 | 15.38% | 1 | 33.33% |
Tejun Heo | 1 | 3.85% | 1 | 33.33% |
Total | 26 | 100.00% | 3 | 100.00% |
EXPORT_SYMBOL_GPL(task_cls_state);
static struct cgroup_subsys_state *
cgrp_css_alloc(struct cgroup_subsys_state *parent_css)
{
struct cgroup_cls_state *cs;
cs = kzalloc(sizeof(*cs), GFP_KERNEL);
if (!cs)
return ERR_PTR(-ENOMEM);
return &cs->css;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 49 | 100.00% | 1 | 100.00% |
Total | 49 | 100.00% | 1 | 100.00% |
static int cgrp_css_online(struct cgroup_subsys_state *css)
{
struct cgroup_cls_state *cs = css_cls_state(css);
struct cgroup_cls_state *parent = css_cls_state(css->parent);
if (parent)
cs->classid = parent->classid;
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 46 | 95.83% | 1 | 50.00% |
Tejun Heo | 2 | 4.17% | 1 | 50.00% |
Total | 48 | 100.00% | 2 | 100.00% |
static void cgrp_css_free(struct cgroup_subsys_state *css)
{
kfree(css_cls_state(css));
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 19 | 100.00% | 1 | 100.00% |
Total | 19 | 100.00% | 1 | 100.00% |
static int update_classid_sock(const void *v, struct file *file, unsigned n)
{
int err;
struct socket *sock = sock_from_file(file, &err);
if (sock) {
spin_lock(&cgroup_sk_update_lock);
sock_cgroup_set_classid(&sock->sk->sk_cgrp_data,
(unsigned long)v);
spin_unlock(&cgroup_sk_update_lock);
}
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 51 | 70.83% | 1 | 25.00% |
Tejun Heo | 20 | 27.78% | 2 | 50.00% |
Nina Schiff | 1 | 1.39% | 1 | 25.00% |
Total | 72 | 100.00% | 4 | 100.00% |
static void cgrp_attach(struct cgroup_taskset *tset)
{
struct cgroup_subsys_state *css;
struct task_struct *p;
cgroup_taskset_for_each(p, css, tset) {
task_lock(p);
iterate_fd(p->files, 0, update_classid_sock,
(void *)(unsigned long)css_cls_state(css)->classid);
task_unlock(p);
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 32 | 47.76% | 1 | 33.33% |
Nina Schiff | 18 | 26.87% | 1 | 33.33% |
Tejun Heo | 17 | 25.37% | 1 | 33.33% |
Total | 67 | 100.00% | 3 | 100.00% |
static u64 read_classid(struct cgroup_subsys_state *css, struct cftype *cft)
{
return css_cls_state(css)->classid;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 24 | 100.00% | 1 | 100.00% |
Total | 24 | 100.00% | 1 | 100.00% |
static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft,
u64 value)
{
struct cgroup_cls_state *cs = css_cls_state(css);
struct css_task_iter it;
struct task_struct *p;
cgroup_sk_alloc_disable();
cs->classid = (u32)value;
css_task_iter_start(css, &it);
while ((p = css_task_iter_next(&it))) {
task_lock(p);
iterate_fd(p->files, 0, update_classid_sock,
(void *)(unsigned long)cs->classid);
task_unlock(p);
}
css_task_iter_end(&it);
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Tejun Heo | 57 | 50.00% | 2 | 50.00% |
Daniel Borkmann | 34 | 29.82% | 1 | 25.00% |
Nina Schiff | 23 | 20.18% | 1 | 25.00% |
Total | 114 | 100.00% | 4 | 100.00% |
static struct cftype ss_files[] = {
{
.name = "classid",
.read_u64 = read_classid,
.write_u64 = write_classid,
},
{ } /* terminate */
};
struct cgroup_subsys net_cls_cgrp_subsys = {
.css_alloc = cgrp_css_alloc,
.css_online = cgrp_css_online,
.css_free = cgrp_css_free,
.attach = cgrp_attach,
.legacy_cftypes = ss_files,
};
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Daniel Borkmann | 383 | 72.13% | 1 | 10.00% |
Tejun Heo | 99 | 18.64% | 6 | 60.00% |
Nina Schiff | 42 | 7.91% | 1 | 10.00% |
Konstantin Khlebnikov | 4 | 0.75% | 1 | 10.00% |
Ingo Molnar | 3 | 0.56% | 1 | 10.00% |
Total | 531 | 100.00% | 10 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.