diff options
Diffstat (limited to 'net/sched/sch_api.c')
-rw-r--r-- | net/sched/sch_api.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 13cc744a2498..4799c4840c1a 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
@@ -980,6 +980,9 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n, void *arg) | |||
980 | struct Qdisc *p = NULL; | 980 | struct Qdisc *p = NULL; |
981 | int err; | 981 | int err; |
982 | 982 | ||
983 | if ((n->nlmsg_type != RTM_GETQDISC) && !capable(CAP_NET_ADMIN)) | ||
984 | return -EPERM; | ||
985 | |||
983 | dev = __dev_get_by_index(net, tcm->tcm_ifindex); | 986 | dev = __dev_get_by_index(net, tcm->tcm_ifindex); |
984 | if (!dev) | 987 | if (!dev) |
985 | return -ENODEV; | 988 | return -ENODEV; |
@@ -1043,6 +1046,9 @@ static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n, void *arg) | |||
1043 | struct Qdisc *q, *p; | 1046 | struct Qdisc *q, *p; |
1044 | int err; | 1047 | int err; |
1045 | 1048 | ||
1049 | if (!capable(CAP_NET_ADMIN)) | ||
1050 | return -EPERM; | ||
1051 | |||
1046 | replay: | 1052 | replay: |
1047 | /* Reinit, just in case something touches this. */ | 1053 | /* Reinit, just in case something touches this. */ |
1048 | tcm = nlmsg_data(n); | 1054 | tcm = nlmsg_data(n); |
@@ -1379,6 +1385,9 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n, void *arg) | |||
1379 | u32 qid = TC_H_MAJ(clid); | 1385 | u32 qid = TC_H_MAJ(clid); |
1380 | int err; | 1386 | int err; |
1381 | 1387 | ||
1388 | if ((n->nlmsg_type != RTM_GETTCLASS) && !capable(CAP_NET_ADMIN)) | ||
1389 | return -EPERM; | ||
1390 | |||
1382 | dev = __dev_get_by_index(net, tcm->tcm_ifindex); | 1391 | dev = __dev_get_by_index(net, tcm->tcm_ifindex); |
1383 | if (!dev) | 1392 | if (!dev) |
1384 | return -ENODEV; | 1393 | return -ENODEV; |