Commit 2728bcd4 authored by Patrick McHardy's avatar Patrick McHardy

[PKT_SCHED]: Use rtattr_parse_nested where appropriate

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
parent 0526ab77
...@@ -279,8 +279,7 @@ struct tc_action *tcf_action_init_1(struct rtattr *rta, struct rtattr *est, ...@@ -279,8 +279,7 @@ struct tc_action *tcf_action_init_1(struct rtattr *rta, struct rtattr *est,
*err = -EINVAL; *err = -EINVAL;
if (name == NULL) { if (name == NULL) {
if (rtattr_parse(tb, TCA_ACT_MAX, RTA_DATA(rta), if (rtattr_parse_nested(tb, TCA_ACT_MAX, rta) < 0)
RTA_PAYLOAD(rta)) < 0)
goto err_out; goto err_out;
kind = tb[TCA_ACT_KIND-1]; kind = tb[TCA_ACT_KIND-1];
if (kind == NULL) if (kind == NULL)
...@@ -344,8 +343,7 @@ struct tc_action *tcf_action_init(struct rtattr *rta, struct rtattr *est, ...@@ -344,8 +343,7 @@ struct tc_action *tcf_action_init(struct rtattr *rta, struct rtattr *est,
struct tc_action *head = NULL, *act, *act_prev = NULL; struct tc_action *head = NULL, *act, *act_prev = NULL;
int i; int i;
if (rtattr_parse(tb, TCA_ACT_MAX_PRIO, RTA_DATA(rta), if (rtattr_parse_nested(tb, TCA_ACT_MAX_PRIO, rta) < 0) {
RTA_PAYLOAD(rta)) < 0) {
*err = -EINVAL; *err = -EINVAL;
return head; return head;
} }
...@@ -467,7 +465,7 @@ tcf_action_get_1(struct rtattr *rta, struct nlmsghdr *n, u32 pid, int *err) ...@@ -467,7 +465,7 @@ tcf_action_get_1(struct rtattr *rta, struct nlmsghdr *n, u32 pid, int *err)
int index; int index;
*err = -EINVAL; *err = -EINVAL;
if (rtattr_parse(tb, TCA_ACT_MAX, RTA_DATA(rta), RTA_PAYLOAD(rta)) < 0) if (rtattr_parse_nested(tb, TCA_ACT_MAX, rta) < 0)
return NULL; return NULL;
if (tb[TCA_ACT_INDEX - 1] == NULL || if (tb[TCA_ACT_INDEX - 1] == NULL ||
...@@ -552,7 +550,7 @@ static int tca_action_flush(struct rtattr *rta, struct nlmsghdr *n, u32 pid) ...@@ -552,7 +550,7 @@ static int tca_action_flush(struct rtattr *rta, struct nlmsghdr *n, u32 pid)
b = (unsigned char *)skb->tail; b = (unsigned char *)skb->tail;
if (rtattr_parse(tb, TCA_ACT_MAX, RTA_DATA(rta), RTA_PAYLOAD(rta)) < 0) if (rtattr_parse_nested(tb, TCA_ACT_MAX, rta) < 0)
goto err_out; goto err_out;
kind = tb[TCA_ACT_KIND-1]; kind = tb[TCA_ACT_KIND-1];
...@@ -599,8 +597,7 @@ tca_action_gd(struct rtattr *rta, struct nlmsghdr *n, u32 pid, int event) ...@@ -599,8 +597,7 @@ tca_action_gd(struct rtattr *rta, struct nlmsghdr *n, u32 pid, int event)
struct rtattr *tb[TCA_ACT_MAX_PRIO+1]; struct rtattr *tb[TCA_ACT_MAX_PRIO+1];
struct tc_action *head = NULL, *act, *act_prev = NULL; struct tc_action *head = NULL, *act, *act_prev = NULL;
if (rtattr_parse(tb, TCA_ACT_MAX_PRIO, RTA_DATA(rta), if (rtattr_parse_nested(tb, TCA_ACT_MAX_PRIO, rta) < 0)
RTA_PAYLOAD(rta)) < 0)
return -EINVAL; return -EINVAL;
if (event == RTM_DELACTION && n->nlmsg_flags&NLM_F_ROOT) { if (event == RTM_DELACTION && n->nlmsg_flags&NLM_F_ROOT) {
......
...@@ -79,8 +79,7 @@ static int tcf_gact_init(struct rtattr *rta, struct rtattr *est, ...@@ -79,8 +79,7 @@ static int tcf_gact_init(struct rtattr *rta, struct rtattr *est,
struct tcf_gact *p; struct tcf_gact *p;
int ret = 0; int ret = 0;
if (rta == NULL || if (rta == NULL || rtattr_parse_nested(tb, TCA_GACT_MAX, rta) < 0)
rtattr_parse(tb, TCA_GACT_MAX, RTA_DATA(rta), RTA_PAYLOAD(rta)) < 0)
return -EINVAL; return -EINVAL;
if (tb[TCA_GACT_PARMS - 1] == NULL || if (tb[TCA_GACT_PARMS - 1] == NULL ||
......
...@@ -122,8 +122,7 @@ tcf_ipt_init(struct rtattr *rta, struct rtattr *est, struct tc_action *a, ...@@ -122,8 +122,7 @@ tcf_ipt_init(struct rtattr *rta, struct rtattr *est, struct tc_action *a,
u32 hook = 0; u32 hook = 0;
u32 index = 0; u32 index = 0;
if (rta == NULL || if (rta == NULL || rtattr_parse_nested(tb, TCA_IPT_MAX, rta) < 0)
rtattr_parse(tb, TCA_IPT_MAX, RTA_DATA(rta), RTA_PAYLOAD(rta)) < 0)
return -EINVAL; return -EINVAL;
if (tb[TCA_IPT_HOOK-1] == NULL || if (tb[TCA_IPT_HOOK-1] == NULL ||
......
...@@ -84,8 +84,7 @@ tcf_mirred_init(struct rtattr *rta, struct rtattr *est, struct tc_action *a, ...@@ -84,8 +84,7 @@ tcf_mirred_init(struct rtattr *rta, struct rtattr *est, struct tc_action *a,
int ret = 0; int ret = 0;
int ok_push = 0; int ok_push = 0;
if (rta == NULL || rtattr_parse(tb, TCA_MIRRED_MAX, RTA_DATA(rta), if (rta == NULL || rtattr_parse_nested(tb, TCA_MIRRED_MAX, rta) < 0)
RTA_PAYLOAD(rta)) < 0)
return -EINVAL; return -EINVAL;
if (tb[TCA_MIRRED_PARMS-1] == NULL || if (tb[TCA_MIRRED_PARMS-1] == NULL ||
......
...@@ -63,8 +63,7 @@ tcf_pedit_init(struct rtattr *rta, struct rtattr *est, struct tc_action *a, ...@@ -63,8 +63,7 @@ tcf_pedit_init(struct rtattr *rta, struct rtattr *est, struct tc_action *a,
struct tc_pedit_key *keys = NULL; struct tc_pedit_key *keys = NULL;
int ksize; int ksize;
if (rta == NULL || rtattr_parse(tb, TCA_PEDIT_MAX, RTA_DATA(rta), if (rta == NULL || rtattr_parse_nested(tb, TCA_PEDIT_MAX, rta) < 0)
RTA_PAYLOAD(rta)) < 0)
return -EINVAL; return -EINVAL;
if (tb[TCA_PEDIT_PARMS - 1] == NULL || if (tb[TCA_PEDIT_PARMS - 1] == NULL ||
......
...@@ -171,8 +171,7 @@ static int tcf_act_police_locate(struct rtattr *rta, struct rtattr *est, ...@@ -171,8 +171,7 @@ static int tcf_act_police_locate(struct rtattr *rta, struct rtattr *est,
struct tcf_police *p; struct tcf_police *p;
struct qdisc_rate_table *R_tab = NULL, *P_tab = NULL; struct qdisc_rate_table *R_tab = NULL, *P_tab = NULL;
if (rta == NULL || rtattr_parse(tb, TCA_POLICE_MAX, RTA_DATA(rta), if (rta == NULL || rtattr_parse_nested(tb, TCA_POLICE_MAX, rta) < 0)
RTA_PAYLOAD(rta)) < 0)
return -EINVAL; return -EINVAL;
if (tb[TCA_POLICE_TBF-1] == NULL || if (tb[TCA_POLICE_TBF-1] == NULL ||
...@@ -417,8 +416,7 @@ struct tcf_police * tcf_police_locate(struct rtattr *rta, struct rtattr *est) ...@@ -417,8 +416,7 @@ struct tcf_police * tcf_police_locate(struct rtattr *rta, struct rtattr *est)
struct rtattr *tb[TCA_POLICE_MAX]; struct rtattr *tb[TCA_POLICE_MAX];
struct tc_police *parm; struct tc_police *parm;
if (rtattr_parse(tb, TCA_POLICE_MAX, RTA_DATA(rta), if (rtattr_parse_nested(tb, TCA_POLICE_MAX, rta) < 0)
RTA_PAYLOAD(rta)) < 0)
return NULL; return NULL;
if (tb[TCA_POLICE_TBF-1] == NULL || if (tb[TCA_POLICE_TBF-1] == NULL ||
......
...@@ -255,8 +255,8 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent, ...@@ -255,8 +255,8 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
* later.) * later.)
*/ */
if (flow) return -EBUSY; if (flow) return -EBUSY;
if (opt == NULL || rtattr_parse(tb,TCA_ATM_MAX,RTA_DATA(opt), if (opt == NULL || rtattr_parse_nested(tb, TCA_ATM_MAX, opt))
RTA_PAYLOAD(opt))) return -EINVAL; return -EINVAL;
if (!tb[TCA_ATM_FD-1] || RTA_PAYLOAD(tb[TCA_ATM_FD-1]) < sizeof(fd)) if (!tb[TCA_ATM_FD-1] || RTA_PAYLOAD(tb[TCA_ATM_FD-1]) < sizeof(fd))
return -EINVAL; return -EINVAL;
fd = *(int *) RTA_DATA(tb[TCA_ATM_FD-1]); fd = *(int *) RTA_DATA(tb[TCA_ATM_FD-1]);
......
...@@ -1439,7 +1439,7 @@ static int cbq_init(struct Qdisc *sch, struct rtattr *opt) ...@@ -1439,7 +1439,7 @@ static int cbq_init(struct Qdisc *sch, struct rtattr *opt)
struct rtattr *tb[TCA_CBQ_MAX]; struct rtattr *tb[TCA_CBQ_MAX];
struct tc_ratespec *r; struct tc_ratespec *r;
if (rtattr_parse(tb, TCA_CBQ_MAX, RTA_DATA(opt), RTA_PAYLOAD(opt)) < 0 || if (rtattr_parse_nested(tb, TCA_CBQ_MAX, opt) < 0 ||
tb[TCA_CBQ_RTAB-1] == NULL || tb[TCA_CBQ_RATE-1] == NULL || tb[TCA_CBQ_RTAB-1] == NULL || tb[TCA_CBQ_RATE-1] == NULL ||
RTA_PAYLOAD(tb[TCA_CBQ_RATE-1]) < sizeof(struct tc_ratespec)) RTA_PAYLOAD(tb[TCA_CBQ_RATE-1]) < sizeof(struct tc_ratespec))
return -EINVAL; return -EINVAL;
...@@ -1824,8 +1824,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct rtattr **t ...@@ -1824,8 +1824,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct rtattr **t
struct cbq_class *parent; struct cbq_class *parent;
struct qdisc_rate_table *rtab = NULL; struct qdisc_rate_table *rtab = NULL;
if (opt==NULL || if (opt==NULL || rtattr_parse_nested(tb, TCA_CBQ_MAX, opt))
rtattr_parse(tb, TCA_CBQ_MAX, RTA_DATA(opt), RTA_PAYLOAD(opt)))
return -EINVAL; return -EINVAL;
if (tb[TCA_CBQ_OVL_STRATEGY-1] && if (tb[TCA_CBQ_OVL_STRATEGY-1] &&
......
...@@ -125,8 +125,7 @@ static int dsmark_change(struct Qdisc *sch, u32 classid, u32 parent, ...@@ -125,8 +125,7 @@ static int dsmark_change(struct Qdisc *sch, u32 classid, u32 parent,
"arg 0x%lx\n",sch,p,classid,parent,*arg); "arg 0x%lx\n",sch,p,classid,parent,*arg);
if (*arg > p->indices) if (*arg > p->indices)
return -ENOENT; return -ENOENT;
if (!opt || rtattr_parse(tb, TCA_DSMARK_MAX, RTA_DATA(opt), if (!opt || rtattr_parse_nested(tb, TCA_DSMARK_MAX, opt))
RTA_PAYLOAD(opt)))
return -EINVAL; return -EINVAL;
if (tb[TCA_DSMARK_MASK-1]) { if (tb[TCA_DSMARK_MASK-1]) {
if (!RTA_PAYLOAD(tb[TCA_DSMARK_MASK-1])) if (!RTA_PAYLOAD(tb[TCA_DSMARK_MASK-1]))
......
...@@ -332,13 +332,11 @@ static int gred_change(struct Qdisc *sch, struct rtattr *opt) ...@@ -332,13 +332,11 @@ static int gred_change(struct Qdisc *sch, struct rtattr *opt)
struct rtattr *tb2[TCA_GRED_DPS]; struct rtattr *tb2[TCA_GRED_DPS];
int i; int i;
if (opt == NULL || if (opt == NULL || rtattr_parse_nested(tb, TCA_GRED_STAB, opt))
rtattr_parse(tb, TCA_GRED_STAB, RTA_DATA(opt), RTA_PAYLOAD(opt)) ) return -EINVAL;
return -EINVAL;
if (tb[TCA_GRED_PARMS-1] == 0 && tb[TCA_GRED_STAB-1] == 0) { if (tb[TCA_GRED_PARMS-1] == 0 && tb[TCA_GRED_STAB-1] == 0) {
rtattr_parse(tb2, TCA_GRED_DPS, RTA_DATA(opt), rtattr_parse_nested(tb2, TCA_GRED_DPS, opt);
RTA_PAYLOAD(opt));
if (tb2[TCA_GRED_DPS-1] == 0) if (tb2[TCA_GRED_DPS-1] == 0)
return -EINVAL; return -EINVAL;
...@@ -475,12 +473,11 @@ static int gred_init(struct Qdisc *sch, struct rtattr *opt) ...@@ -475,12 +473,11 @@ static int gred_init(struct Qdisc *sch, struct rtattr *opt)
struct rtattr *tb[TCA_GRED_STAB]; struct rtattr *tb[TCA_GRED_STAB];
struct rtattr *tb2[TCA_GRED_DPS]; struct rtattr *tb2[TCA_GRED_DPS];
if (opt == NULL || if (opt == NULL || rtattr_parse_nested(tb, TCA_GRED_STAB, opt))
rtattr_parse(tb, TCA_GRED_STAB, RTA_DATA(opt), RTA_PAYLOAD(opt)) ) return -EINVAL;
return -EINVAL;
if (tb[TCA_GRED_PARMS-1] == 0 && tb[TCA_GRED_STAB-1] == 0) { if (tb[TCA_GRED_PARMS-1] == 0 && tb[TCA_GRED_STAB-1] == 0) {
rtattr_parse(tb2, TCA_GRED_DPS, RTA_DATA(opt),RTA_PAYLOAD(opt)); rtattr_parse_nested(tb2, TCA_GRED_DPS, opt);
if (tb2[TCA_GRED_DPS-1] == 0) if (tb2[TCA_GRED_DPS-1] == 0)
return -EINVAL; return -EINVAL;
......
...@@ -1046,8 +1046,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, ...@@ -1046,8 +1046,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
struct tc_service_curve *rsc = NULL, *fsc = NULL, *usc = NULL; struct tc_service_curve *rsc = NULL, *fsc = NULL, *usc = NULL;
u64 cur_time; u64 cur_time;
if (opt == NULL || if (opt == NULL || rtattr_parse_nested(tb, TCA_HFSC_MAX, opt))
rtattr_parse(tb, TCA_HFSC_MAX, RTA_DATA(opt), RTA_PAYLOAD(opt)))
return -EINVAL; return -EINVAL;
if (tb[TCA_HFSC_RSC-1]) { if (tb[TCA_HFSC_RSC-1]) {
......
...@@ -1267,7 +1267,7 @@ static int htb_init(struct Qdisc *sch, struct rtattr *opt) ...@@ -1267,7 +1267,7 @@ static int htb_init(struct Qdisc *sch, struct rtattr *opt)
printk(KERN_INFO "HTB init, kernel part version %d.%d\n", printk(KERN_INFO "HTB init, kernel part version %d.%d\n",
HTB_VER >> 16,HTB_VER & 0xffff); HTB_VER >> 16,HTB_VER & 0xffff);
#endif #endif
if (!opt || rtattr_parse(tb, TCA_HTB_INIT, RTA_DATA(opt), RTA_PAYLOAD(opt)) || if (!opt || rtattr_parse_nested(tb, TCA_HTB_INIT, opt) ||
tb[TCA_HTB_INIT-1] == NULL || tb[TCA_HTB_INIT-1] == NULL ||
RTA_PAYLOAD(tb[TCA_HTB_INIT-1]) < sizeof(*gopt)) { RTA_PAYLOAD(tb[TCA_HTB_INIT-1]) < sizeof(*gopt)) {
printk(KERN_ERR "HTB: hey probably you have bad tc tool ?\n"); printk(KERN_ERR "HTB: hey probably you have bad tc tool ?\n");
...@@ -1559,7 +1559,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1559,7 +1559,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
struct tc_htb_opt *hopt; struct tc_htb_opt *hopt;
/* extract all subattrs from opt attr */ /* extract all subattrs from opt attr */
if (!opt || rtattr_parse(tb, TCA_HTB_RTAB, RTA_DATA(opt), RTA_PAYLOAD(opt)) || if (!opt || rtattr_parse_nested(tb, TCA_HTB_RTAB, opt) ||
tb[TCA_HTB_PARMS-1] == NULL || tb[TCA_HTB_PARMS-1] == NULL ||
RTA_PAYLOAD(tb[TCA_HTB_PARMS-1]) < sizeof(*hopt)) RTA_PAYLOAD(tb[TCA_HTB_PARMS-1]) < sizeof(*hopt))
goto failure; goto failure;
......
...@@ -364,7 +364,7 @@ static int red_change(struct Qdisc *sch, struct rtattr *opt) ...@@ -364,7 +364,7 @@ static int red_change(struct Qdisc *sch, struct rtattr *opt)
struct tc_red_qopt *ctl; struct tc_red_qopt *ctl;
if (opt == NULL || if (opt == NULL ||
rtattr_parse(tb, TCA_RED_STAB, RTA_DATA(opt), RTA_PAYLOAD(opt)) || rtattr_parse_nested(tb, TCA_RED_STAB, opt) ||
tb[TCA_RED_PARMS-1] == 0 || tb[TCA_RED_STAB-1] == 0 || tb[TCA_RED_PARMS-1] == 0 || tb[TCA_RED_STAB-1] == 0 ||
RTA_PAYLOAD(tb[TCA_RED_PARMS-1]) < sizeof(*ctl) || RTA_PAYLOAD(tb[TCA_RED_PARMS-1]) < sizeof(*ctl) ||
RTA_PAYLOAD(tb[TCA_RED_STAB-1]) < 256) RTA_PAYLOAD(tb[TCA_RED_STAB-1]) < 256)
......
...@@ -310,7 +310,7 @@ static int tbf_change(struct Qdisc* sch, struct rtattr *opt) ...@@ -310,7 +310,7 @@ static int tbf_change(struct Qdisc* sch, struct rtattr *opt)
struct Qdisc *child = NULL; struct Qdisc *child = NULL;
int max_size,n; int max_size,n;
if (rtattr_parse(tb, TCA_TBF_PTAB, RTA_DATA(opt), RTA_PAYLOAD(opt)) || if (rtattr_parse_nested(tb, TCA_TBF_PTAB, opt) ||
tb[TCA_TBF_PARMS-1] == NULL || tb[TCA_TBF_PARMS-1] == NULL ||
RTA_PAYLOAD(tb[TCA_TBF_PARMS-1]) < sizeof(*qopt)) RTA_PAYLOAD(tb[TCA_TBF_PARMS-1]) < sizeof(*qopt))
goto done; goto done;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment