diff options
Diffstat (limited to 'net/sched/cls_u32.c')
| -rw-r--r-- | net/sched/cls_u32.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 3228cc4ae082..b51c2c324abc 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c | |||
| @@ -694,16 +694,16 @@ static int u32_dump(struct tcf_proto *tp, unsigned long fh, | |||
| 694 | struct sk_buff *skb, struct tcmsg *t) | 694 | struct sk_buff *skb, struct tcmsg *t) |
| 695 | { | 695 | { |
| 696 | struct tc_u_knode *n = (struct tc_u_knode*)fh; | 696 | struct tc_u_knode *n = (struct tc_u_knode*)fh; |
| 697 | unsigned char *b = skb_tail_pointer(skb); | 697 | struct nlattr *nest; |
| 698 | struct nlattr *nla; | ||
| 699 | 698 | ||
| 700 | if (n == NULL) | 699 | if (n == NULL) |
| 701 | return skb->len; | 700 | return skb->len; |
| 702 | 701 | ||
| 703 | t->tcm_handle = n->handle; | 702 | t->tcm_handle = n->handle; |
| 704 | 703 | ||
| 705 | nla = (struct nlattr*)b; | 704 | nest = nla_nest_start(skb, TCA_OPTIONS); |
| 706 | NLA_PUT(skb, TCA_OPTIONS, 0, NULL); | 705 | if (nest == NULL) |
| 706 | goto nla_put_failure; | ||
| 707 | 707 | ||
| 708 | if (TC_U32_KEY(n->handle) == 0) { | 708 | if (TC_U32_KEY(n->handle) == 0) { |
| 709 | struct tc_u_hnode *ht = (struct tc_u_hnode*)fh; | 709 | struct tc_u_hnode *ht = (struct tc_u_hnode*)fh; |
| @@ -741,14 +741,15 @@ static int u32_dump(struct tcf_proto *tp, unsigned long fh, | |||
| 741 | #endif | 741 | #endif |
| 742 | } | 742 | } |
| 743 | 743 | ||
| 744 | nla->nla_len = skb_tail_pointer(skb) - b; | 744 | nla_nest_end(skb, nest); |
| 745 | |||
| 745 | if (TC_U32_KEY(n->handle)) | 746 | if (TC_U32_KEY(n->handle)) |
| 746 | if (tcf_exts_dump_stats(skb, &n->exts, &u32_ext_map) < 0) | 747 | if (tcf_exts_dump_stats(skb, &n->exts, &u32_ext_map) < 0) |
| 747 | goto nla_put_failure; | 748 | goto nla_put_failure; |
| 748 | return skb->len; | 749 | return skb->len; |
| 749 | 750 | ||
| 750 | nla_put_failure: | 751 | nla_put_failure: |
| 751 | nlmsg_trim(skb, b); | 752 | nla_nest_cancel(skb, nest); |
| 752 | return -1; | 753 | return -1; |
| 753 | } | 754 | } |
| 754 | 755 | ||
