git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[IPSEC]: Added xfrm_decode_session_reverse and xfrmX_policy_check_reverse
[safe/jmp/linux-2.6]
/
net
/
sched
/
cls_api.c
diff --git
a/net/sched/cls_api.c
b/net/sched/cls_api.c
index
bb98045
..
80dccac
100644
(file)
--- a/
net/sched/cls_api.c
+++ b/
net/sched/cls_api.c
@@
-23,6
+23,8
@@
#include <linux/init.h>
#include <linux/kmod.h>
#include <linux/netlink.h>
#include <linux/init.h>
#include <linux/kmod.h>
#include <linux/netlink.h>
+#include <net/net_namespace.h>
+#include <net/sock.h>
#include <net/netlink.h>
#include <net/pkt_sched.h>
#include <net/pkt_cls.h>
#include <net/netlink.h>
#include <net/pkt_sched.h>
#include <net/pkt_cls.h>
@@
-119,6
+121,7
@@
static __inline__ u32 tcf_auto_prio(struct tcf_proto *tp)
static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
{
static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
{
+ struct net *net = skb->sk->sk_net;
struct rtattr **tca;
struct tcmsg *t;
u32 protocol;
struct rtattr **tca;
struct tcmsg *t;
u32 protocol;
@@
-135,6
+138,9
@@
static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
unsigned long fh;
int err;
unsigned long fh;
int err;
+ if (net != &init_net)
+ return -EINVAL;
+
replay:
tca = arg;
t = NLMSG_DATA(n);
replay:
tca = arg;
t = NLMSG_DATA(n);
@@
-355,7
+361,7
@@
static int tfilter_notify(struct sk_buff *oskb, struct nlmsghdr *n,
return -EINVAL;
}
return -EINVAL;
}
- return rtnetlink_send(skb, pid, RTNLGRP_TC, n->nlmsg_flags&NLM_F_ECHO);
+ return rtnetlink_send(skb,
&init_net,
pid, RTNLGRP_TC, n->nlmsg_flags&NLM_F_ECHO);
}
struct tcf_dump_args
}
struct tcf_dump_args
@@
-375,6
+381,7
@@
static int tcf_node_dump(struct tcf_proto *tp, unsigned long n, struct tcf_walke
static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
{
static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
{
+ struct net *net = skb->sk->sk_net;
int t;
int s_t;
struct net_device *dev;
int t;
int s_t;
struct net_device *dev;
@@
-385,6
+392,9
@@
static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
const struct Qdisc_class_ops *cops;
struct tcf_dump_args arg;
const struct Qdisc_class_ops *cops;
struct tcf_dump_args arg;
+ if (net != &init_net)
+ return 0;
+
if (cb->nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*tcm)))
return skb->len;
if ((dev = dev_get_by_index(&init_net, tcm->tcm_ifindex)) == NULL)
if (cb->nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*tcm)))
return skb->len;
if ((dev = dev_get_by_index(&init_net, tcm->tcm_ifindex)) == NULL)