Loading net/sched/cls_api.c +19 −10 Original line number Diff line number Diff line Loading @@ -293,9 +293,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) /* And the last stroke */ chain = cops->tcf_chain(q, cl); if (chain == NULL) { err = -EINVAL; if (chain == NULL) goto errout; } if (n->nlmsg_type == RTM_DELTFILTER && prio == 0) { tfilter_notify_chain(net, skb, n, chain, RTM_DELTFILTER); tcf_destroy_chain(chain); Loading @@ -310,8 +311,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) if (tp->prio >= prio) { if (tp->prio == prio) { if (!nprio || (tp->protocol != protocol && protocol)) (tp->protocol != protocol && protocol)) { err = -EINVAL; goto errout; } } else tp = NULL; break; Loading @@ -321,13 +324,16 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) if (tp == NULL) { /* Proto-tcf does not exist, create new one */ if (tca[TCA_KIND] == NULL || !protocol) if (tca[TCA_KIND] == NULL || !protocol) { err = -EINVAL; goto errout; } err = -ENOENT; if (n->nlmsg_type != RTM_NEWTFILTER || !(n->nlmsg_flags & NLM_F_CREATE)) !(n->nlmsg_flags & NLM_F_CREATE)) { err = -ENOENT; goto errout; } if (!nprio) nprio = TC_H_MAJ(tcf_auto_prio(rtnl_dereference(*back))); Loading @@ -339,8 +345,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) goto errout; } tp_created = 1; } else if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], tp->ops->kind)) } else if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], tp->ops->kind)) { err = -EINVAL; goto errout; } fh = tp->ops->get(tp, t->tcm_handle); Loading @@ -357,17 +365,18 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) goto errout; } err = -ENOENT; if (n->nlmsg_type != RTM_NEWTFILTER || !(n->nlmsg_flags & NLM_F_CREATE)) !(n->nlmsg_flags & NLM_F_CREATE)) { err = -ENOENT; goto errout; } } else { switch (n->nlmsg_type) { case RTM_NEWTFILTER: err = -EEXIST; if (n->nlmsg_flags & NLM_F_EXCL) { if (tp_created) tcf_proto_destroy(tp, true); err = -EEXIST; goto errout; } break; Loading Loading
net/sched/cls_api.c +19 −10 Original line number Diff line number Diff line Loading @@ -293,9 +293,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) /* And the last stroke */ chain = cops->tcf_chain(q, cl); if (chain == NULL) { err = -EINVAL; if (chain == NULL) goto errout; } if (n->nlmsg_type == RTM_DELTFILTER && prio == 0) { tfilter_notify_chain(net, skb, n, chain, RTM_DELTFILTER); tcf_destroy_chain(chain); Loading @@ -310,8 +311,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) if (tp->prio >= prio) { if (tp->prio == prio) { if (!nprio || (tp->protocol != protocol && protocol)) (tp->protocol != protocol && protocol)) { err = -EINVAL; goto errout; } } else tp = NULL; break; Loading @@ -321,13 +324,16 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) if (tp == NULL) { /* Proto-tcf does not exist, create new one */ if (tca[TCA_KIND] == NULL || !protocol) if (tca[TCA_KIND] == NULL || !protocol) { err = -EINVAL; goto errout; } err = -ENOENT; if (n->nlmsg_type != RTM_NEWTFILTER || !(n->nlmsg_flags & NLM_F_CREATE)) !(n->nlmsg_flags & NLM_F_CREATE)) { err = -ENOENT; goto errout; } if (!nprio) nprio = TC_H_MAJ(tcf_auto_prio(rtnl_dereference(*back))); Loading @@ -339,8 +345,10 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) goto errout; } tp_created = 1; } else if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], tp->ops->kind)) } else if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], tp->ops->kind)) { err = -EINVAL; goto errout; } fh = tp->ops->get(tp, t->tcm_handle); Loading @@ -357,17 +365,18 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) goto errout; } err = -ENOENT; if (n->nlmsg_type != RTM_NEWTFILTER || !(n->nlmsg_flags & NLM_F_CREATE)) !(n->nlmsg_flags & NLM_F_CREATE)) { err = -ENOENT; goto errout; } } else { switch (n->nlmsg_type) { case RTM_NEWTFILTER: err = -EEXIST; if (n->nlmsg_flags & NLM_F_EXCL) { if (tp_created) tcf_proto_destroy(tp, true); err = -EEXIST; goto errout; } break; Loading