提交 1587bac4 编写于 作者: P Patrick McHardy 提交者: David S. Miller

[NET_SCHED]: Use typeful attribute parsing helpers

Signed-off-by: NPatrick McHardy <kaber@trash.net>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 24beeab5
...@@ -690,7 +690,7 @@ tcf_action_get_1(struct nlattr *nla, struct nlmsghdr *n, u32 pid) ...@@ -690,7 +690,7 @@ tcf_action_get_1(struct nlattr *nla, struct nlmsghdr *n, u32 pid)
if (tb[TCA_ACT_INDEX] == NULL || if (tb[TCA_ACT_INDEX] == NULL ||
nla_len(tb[TCA_ACT_INDEX]) < sizeof(index)) nla_len(tb[TCA_ACT_INDEX]) < sizeof(index))
goto err_out; goto err_out;
index = *(int *)nla_data(tb[TCA_ACT_INDEX]); index = nla_get_u32(tb[TCA_ACT_INDEX]);
err = -ENOMEM; err = -ENOMEM;
a = kzalloc(sizeof(struct tc_action), GFP_KERNEL); a = kzalloc(sizeof(struct tc_action), GFP_KERNEL);
......
...@@ -123,7 +123,7 @@ static int tcf_ipt_init(struct nlattr *nla, struct nlattr *est, ...@@ -123,7 +123,7 @@ static int tcf_ipt_init(struct nlattr *nla, struct nlattr *est,
if (tb[TCA_IPT_INDEX] != NULL && if (tb[TCA_IPT_INDEX] != NULL &&
nla_len(tb[TCA_IPT_INDEX]) >= sizeof(u32)) nla_len(tb[TCA_IPT_INDEX]) >= sizeof(u32))
index = *(u32 *)nla_data(tb[TCA_IPT_INDEX]); index = nla_get_u32(tb[TCA_IPT_INDEX]);
pc = tcf_hash_check(index, a, bind, &ipt_hash_info); pc = tcf_hash_check(index, a, bind, &ipt_hash_info);
if (!pc) { if (!pc) {
...@@ -140,7 +140,7 @@ static int tcf_ipt_init(struct nlattr *nla, struct nlattr *est, ...@@ -140,7 +140,7 @@ static int tcf_ipt_init(struct nlattr *nla, struct nlattr *est,
} }
ipt = to_ipt(pc); ipt = to_ipt(pc);
hook = *(u32 *)nla_data(tb[TCA_IPT_HOOK]); hook = nla_get_u32(tb[TCA_IPT_HOOK]);
err = -ENOMEM; err = -ENOMEM;
tname = kmalloc(IFNAMSIZ, GFP_KERNEL); tname = kmalloc(IFNAMSIZ, GFP_KERNEL);
......
...@@ -203,7 +203,7 @@ static int tcf_act_police_locate(struct nlattr *nla, struct nlattr *est, ...@@ -203,7 +203,7 @@ static int tcf_act_police_locate(struct nlattr *nla, struct nlattr *est,
} }
if (tb[TCA_POLICE_RESULT]) if (tb[TCA_POLICE_RESULT])
police->tcfp_result = *(u32*)nla_data(tb[TCA_POLICE_RESULT]); police->tcfp_result = nla_get_u32(tb[TCA_POLICE_RESULT]);
police->tcfp_toks = police->tcfp_burst = parm->burst; police->tcfp_toks = police->tcfp_burst = parm->burst;
police->tcfp_mtu = parm->mtu; police->tcfp_mtu = parm->mtu;
if (police->tcfp_mtu == 0) { if (police->tcfp_mtu == 0) {
...@@ -216,8 +216,7 @@ static int tcf_act_police_locate(struct nlattr *nla, struct nlattr *est, ...@@ -216,8 +216,7 @@ static int tcf_act_police_locate(struct nlattr *nla, struct nlattr *est,
police->tcf_action = parm->action; police->tcf_action = parm->action;
if (tb[TCA_POLICE_AVRATE]) if (tb[TCA_POLICE_AVRATE])
police->tcfp_ewma_rate = police->tcfp_ewma_rate = nla_get_u32(tb[TCA_POLICE_AVRATE]);
*(u32*)nla_data(tb[TCA_POLICE_AVRATE]);
if (est) if (est)
gen_replace_estimator(&police->tcf_bstats, gen_replace_estimator(&police->tcf_bstats,
&police->tcf_rate_est, &police->tcf_rate_est,
......
...@@ -150,7 +150,7 @@ static inline int basic_set_parms(struct tcf_proto *tp, struct basic_filter *f, ...@@ -150,7 +150,7 @@ static inline int basic_set_parms(struct tcf_proto *tp, struct basic_filter *f,
goto errout; goto errout;
if (tb[TCA_BASIC_CLASSID]) { if (tb[TCA_BASIC_CLASSID]) {
f->res.classid = *(u32*)nla_data(tb[TCA_BASIC_CLASSID]); f->res.classid = nla_get_u32(tb[TCA_BASIC_CLASSID]);
tcf_bind_filter(tp, &f->res, base); tcf_bind_filter(tp, &f->res, base);
} }
......
...@@ -203,7 +203,7 @@ fw_change_attrs(struct tcf_proto *tp, struct fw_filter *f, ...@@ -203,7 +203,7 @@ fw_change_attrs(struct tcf_proto *tp, struct fw_filter *f,
if (tb[TCA_FW_CLASSID]) { if (tb[TCA_FW_CLASSID]) {
if (nla_len(tb[TCA_FW_CLASSID]) != sizeof(u32)) if (nla_len(tb[TCA_FW_CLASSID]) != sizeof(u32))
goto errout; goto errout;
f->res.classid = *(u32*)nla_data(tb[TCA_FW_CLASSID]); f->res.classid = nla_get_u32(tb[TCA_FW_CLASSID]);
tcf_bind_filter(tp, &f->res, base); tcf_bind_filter(tp, &f->res, base);
} }
...@@ -218,7 +218,7 @@ fw_change_attrs(struct tcf_proto *tp, struct fw_filter *f, ...@@ -218,7 +218,7 @@ fw_change_attrs(struct tcf_proto *tp, struct fw_filter *f,
if (tb[TCA_FW_MASK]) { if (tb[TCA_FW_MASK]) {
if (nla_len(tb[TCA_FW_MASK]) != sizeof(u32)) if (nla_len(tb[TCA_FW_MASK]) != sizeof(u32))
goto errout; goto errout;
mask = *(u32*)nla_data(tb[TCA_FW_MASK]); mask = nla_get_u32(tb[TCA_FW_MASK]);
if (mask != head->mask) if (mask != head->mask)
goto errout; goto errout;
} else if (head->mask != 0xFFFFFFFF) } else if (head->mask != 0xFFFFFFFF)
...@@ -264,7 +264,7 @@ static int fw_change(struct tcf_proto *tp, unsigned long base, ...@@ -264,7 +264,7 @@ static int fw_change(struct tcf_proto *tp, unsigned long base,
if (tb[TCA_FW_MASK]) { if (tb[TCA_FW_MASK]) {
if (nla_len(tb[TCA_FW_MASK]) != sizeof(u32)) if (nla_len(tb[TCA_FW_MASK]) != sizeof(u32))
return -EINVAL; return -EINVAL;
mask = *(u32*)nla_data(tb[TCA_FW_MASK]); mask = nla_get_u32(tb[TCA_FW_MASK]);
} }
head = kzalloc(sizeof(struct fw_head), GFP_KERNEL); head = kzalloc(sizeof(struct fw_head), GFP_KERNEL);
......
...@@ -348,7 +348,7 @@ static int route4_set_parms(struct tcf_proto *tp, unsigned long base, ...@@ -348,7 +348,7 @@ static int route4_set_parms(struct tcf_proto *tp, unsigned long base,
goto errout; goto errout;
if (nla_len(tb[TCA_ROUTE4_TO]) < sizeof(u32)) if (nla_len(tb[TCA_ROUTE4_TO]) < sizeof(u32))
goto errout; goto errout;
to = *(u32*)nla_data(tb[TCA_ROUTE4_TO]); to = nla_get_u32(tb[TCA_ROUTE4_TO]);
if (to > 0xFF) if (to > 0xFF)
goto errout; goto errout;
nhandle = to; nhandle = to;
...@@ -359,14 +359,14 @@ static int route4_set_parms(struct tcf_proto *tp, unsigned long base, ...@@ -359,14 +359,14 @@ static int route4_set_parms(struct tcf_proto *tp, unsigned long base,
goto errout; goto errout;
if (nla_len(tb[TCA_ROUTE4_FROM]) < sizeof(u32)) if (nla_len(tb[TCA_ROUTE4_FROM]) < sizeof(u32))
goto errout; goto errout;
id = *(u32*)nla_data(tb[TCA_ROUTE4_FROM]); id = nla_get_u32(tb[TCA_ROUTE4_FROM]);
if (id > 0xFF) if (id > 0xFF)
goto errout; goto errout;
nhandle |= id << 16; nhandle |= id << 16;
} else if (tb[TCA_ROUTE4_IIF]) { } else if (tb[TCA_ROUTE4_IIF]) {
if (nla_len(tb[TCA_ROUTE4_IIF]) < sizeof(u32)) if (nla_len(tb[TCA_ROUTE4_IIF]) < sizeof(u32))
goto errout; goto errout;
id = *(u32*)nla_data(tb[TCA_ROUTE4_IIF]); id = nla_get_u32(tb[TCA_ROUTE4_IIF]);
if (id > 0x7FFF) if (id > 0x7FFF)
goto errout; goto errout;
nhandle |= (id | 0x8000) << 16; nhandle |= (id | 0x8000) << 16;
...@@ -411,7 +411,7 @@ static int route4_set_parms(struct tcf_proto *tp, unsigned long base, ...@@ -411,7 +411,7 @@ static int route4_set_parms(struct tcf_proto *tp, unsigned long base,
tcf_tree_unlock(tp); tcf_tree_unlock(tp);
if (tb[TCA_ROUTE4_CLASSID]) { if (tb[TCA_ROUTE4_CLASSID]) {
f->res.classid = *(u32*)nla_data(tb[TCA_ROUTE4_CLASSID]); f->res.classid = nla_get_u32(tb[TCA_ROUTE4_CLASSID]);
tcf_bind_filter(tp, &f->res, base); tcf_bind_filter(tp, &f->res, base);
} }
......
...@@ -430,7 +430,7 @@ static int rsvp_change(struct tcf_proto *tp, unsigned long base, ...@@ -430,7 +430,7 @@ static int rsvp_change(struct tcf_proto *tp, unsigned long base,
if (f->handle != handle && handle) if (f->handle != handle && handle)
goto errout2; goto errout2;
if (tb[TCA_RSVP_CLASSID-1]) { if (tb[TCA_RSVP_CLASSID-1]) {
f->res.classid = *(u32*)nla_data(tb[TCA_RSVP_CLASSID-1]); f->res.classid = nla_get_u32(tb[TCA_RSVP_CLASSID-1]);
tcf_bind_filter(tp, &f->res, base); tcf_bind_filter(tp, &f->res, base);
} }
...@@ -470,7 +470,7 @@ static int rsvp_change(struct tcf_proto *tp, unsigned long base, ...@@ -470,7 +470,7 @@ static int rsvp_change(struct tcf_proto *tp, unsigned long base,
err = -EINVAL; err = -EINVAL;
if (nla_len(tb[TCA_RSVP_CLASSID-1]) != 4) if (nla_len(tb[TCA_RSVP_CLASSID-1]) != 4)
goto errout; goto errout;
f->res.classid = *(u32*)nla_data(tb[TCA_RSVP_CLASSID-1]); f->res.classid = nla_get_u32(tb[TCA_RSVP_CLASSID-1]);
} }
err = -EINVAL; err = -EINVAL;
......
...@@ -221,19 +221,19 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle, ...@@ -221,19 +221,19 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle,
if (tb[TCA_TCINDEX_HASH]) { if (tb[TCA_TCINDEX_HASH]) {
if (nla_len(tb[TCA_TCINDEX_HASH]) < sizeof(u32)) if (nla_len(tb[TCA_TCINDEX_HASH]) < sizeof(u32))
goto errout; goto errout;
cp.hash = *(u32 *) nla_data(tb[TCA_TCINDEX_HASH]); cp.hash = nla_get_u32(tb[TCA_TCINDEX_HASH]);
} }
if (tb[TCA_TCINDEX_MASK]) { if (tb[TCA_TCINDEX_MASK]) {
if (nla_len(tb[TCA_TCINDEX_MASK]) < sizeof(u16)) if (nla_len(tb[TCA_TCINDEX_MASK]) < sizeof(u16))
goto errout; goto errout;
cp.mask = *(u16 *) nla_data(tb[TCA_TCINDEX_MASK]); cp.mask = nla_get_u16(tb[TCA_TCINDEX_MASK]);
} }
if (tb[TCA_TCINDEX_SHIFT]) { if (tb[TCA_TCINDEX_SHIFT]) {
if (nla_len(tb[TCA_TCINDEX_SHIFT]) < sizeof(int)) if (nla_len(tb[TCA_TCINDEX_SHIFT]) < sizeof(int))
goto errout; goto errout;
cp.shift = *(int *) nla_data(tb[TCA_TCINDEX_SHIFT]); cp.shift = nla_get_u32(tb[TCA_TCINDEX_SHIFT]);
} }
err = -EBUSY; err = -EBUSY;
...@@ -251,8 +251,7 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle, ...@@ -251,8 +251,7 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle,
if (tb[TCA_TCINDEX_FALL_THROUGH]) { if (tb[TCA_TCINDEX_FALL_THROUGH]) {
if (nla_len(tb[TCA_TCINDEX_FALL_THROUGH]) < sizeof(u32)) if (nla_len(tb[TCA_TCINDEX_FALL_THROUGH]) < sizeof(u32))
goto errout; goto errout;
cp.fall_through = cp.fall_through = nla_get_u32(tb[TCA_TCINDEX_FALL_THROUGH]);
*(u32 *) nla_data(tb[TCA_TCINDEX_FALL_THROUGH]);
} }
if (!cp.hash) { if (!cp.hash) {
...@@ -305,7 +304,7 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle, ...@@ -305,7 +304,7 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle,
} }
if (tb[TCA_TCINDEX_CLASSID]) { if (tb[TCA_TCINDEX_CLASSID]) {
cr.res.classid = *(u32 *) nla_data(tb[TCA_TCINDEX_CLASSID]); cr.res.classid = nla_get_u32(tb[TCA_TCINDEX_CLASSID]);
tcf_bind_filter(tp, &cr.res, base); tcf_bind_filter(tp, &cr.res, base);
} }
......
...@@ -474,7 +474,7 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base, ...@@ -474,7 +474,7 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base,
err = -EINVAL; err = -EINVAL;
if (tb[TCA_U32_LINK]) { if (tb[TCA_U32_LINK]) {
u32 handle = *(u32*)nla_data(tb[TCA_U32_LINK]); u32 handle = nla_get_u32(tb[TCA_U32_LINK]);
struct tc_u_hnode *ht_down = NULL; struct tc_u_hnode *ht_down = NULL;
if (TC_U32_KEY(handle)) if (TC_U32_KEY(handle))
...@@ -496,7 +496,7 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base, ...@@ -496,7 +496,7 @@ static int u32_set_parms(struct tcf_proto *tp, unsigned long base,
ht_down->refcnt--; ht_down->refcnt--;
} }
if (tb[TCA_U32_CLASSID]) { if (tb[TCA_U32_CLASSID]) {
n->res.classid = *(u32*)nla_data(tb[TCA_U32_CLASSID]); n->res.classid = nla_get_u32(tb[TCA_U32_CLASSID]);
tcf_bind_filter(tp, &n->res, base); tcf_bind_filter(tp, &n->res, base);
} }
...@@ -543,7 +543,7 @@ static int u32_change(struct tcf_proto *tp, unsigned long base, u32 handle, ...@@ -543,7 +543,7 @@ static int u32_change(struct tcf_proto *tp, unsigned long base, u32 handle,
} }
if (tb[TCA_U32_DIVISOR]) { if (tb[TCA_U32_DIVISOR]) {
unsigned divisor = *(unsigned*)nla_data(tb[TCA_U32_DIVISOR]); unsigned divisor = nla_get_u32(tb[TCA_U32_DIVISOR]);
if (--divisor > 0x100) if (--divisor > 0x100)
return -EINVAL; return -EINVAL;
...@@ -569,7 +569,7 @@ static int u32_change(struct tcf_proto *tp, unsigned long base, u32 handle, ...@@ -569,7 +569,7 @@ static int u32_change(struct tcf_proto *tp, unsigned long base, u32 handle,
} }
if (tb[TCA_U32_HASH]) { if (tb[TCA_U32_HASH]) {
htid = *(unsigned*)nla_data(tb[TCA_U32_HASH]); htid = nla_get_u32(tb[TCA_U32_HASH]);
if (TC_U32_HTID(htid) == TC_U32_ROOT) { if (TC_U32_HTID(htid) == TC_U32_ROOT) {
ht = tp->root; ht = tp->root;
htid = ht->handle; htid = ht->handle;
......
...@@ -600,7 +600,7 @@ static int meta_int_change(struct meta_value *dst, struct nlattr *nla) ...@@ -600,7 +600,7 @@ static int meta_int_change(struct meta_value *dst, struct nlattr *nla)
dst->val = *(unsigned long *) nla_data(nla); dst->val = *(unsigned long *) nla_data(nla);
dst->len = sizeof(unsigned long); dst->len = sizeof(unsigned long);
} else if (nla_len(nla) == sizeof(u32)) { } else if (nla_len(nla) == sizeof(u32)) {
dst->val = *(u32 *) nla_data(nla); dst->val = nla_get_u32(nla);
dst->len = sizeof(u32); dst->len = sizeof(u32);
} else } else
return -EINVAL; return -EINVAL;
......
...@@ -231,7 +231,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent, ...@@ -231,7 +231,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
if (!tb[TCA_ATM_FD] || nla_len(tb[TCA_ATM_FD]) < sizeof(fd)) if (!tb[TCA_ATM_FD] || nla_len(tb[TCA_ATM_FD]) < sizeof(fd))
return -EINVAL; return -EINVAL;
fd = *(int *)nla_data(tb[TCA_ATM_FD]); fd = nla_get_u32(tb[TCA_ATM_FD]);
pr_debug("atm_tc_change: fd %d\n", fd); pr_debug("atm_tc_change: fd %d\n", fd);
if (tb[TCA_ATM_HDR]) { if (tb[TCA_ATM_HDR]) {
hdr_len = nla_len(tb[TCA_ATM_HDR]); hdr_len = nla_len(tb[TCA_ATM_HDR]);
...@@ -246,7 +246,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent, ...@@ -246,7 +246,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
if (nla_len(tb[TCA_ATM_EXCESS]) != sizeof(u32)) if (nla_len(tb[TCA_ATM_EXCESS]) != sizeof(u32))
return -EINVAL; return -EINVAL;
excess = (struct atm_flow_data *) excess = (struct atm_flow_data *)
atm_tc_get(sch, *(u32 *)nla_data(tb[TCA_ATM_EXCESS])); atm_tc_get(sch, nla_get_u32(tb[TCA_ATM_EXCESS]));
if (!excess) if (!excess)
return -ENOENT; return -ENOENT;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册