diff options
author | David S. Miller <davem@davemloft.net> | 2016-10-02 21:17:07 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-10-02 22:20:41 -0400 |
commit | b50afd203a5ef1998c18d6519ad2b2c546d6af22 (patch) | |
tree | 608e6845e78a4ffe623c7cdf6581e29e2d9be0a9 /net/sched/act_ife.c | |
parent | d6169b0206db1c8c8d0e4c6b79fdf4b2fc6455f1 (diff) | |
parent | c8d2bc9bc39ebea8437fd974fdbc21847bb897a3 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Three sets of overlapping changes. Nothing serious.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/act_ife.c')
-rw-r--r-- | net/sched/act_ife.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c index ccf7b4b655fe..95c463cbb9a6 100644 --- a/net/sched/act_ife.c +++ b/net/sched/act_ife.c | |||
@@ -53,7 +53,7 @@ int ife_tlv_meta_encode(void *skbdata, u16 attrtype, u16 dlen, const void *dval) | |||
53 | u32 *tlv = (u32 *)(skbdata); | 53 | u32 *tlv = (u32 *)(skbdata); |
54 | u16 totlen = nla_total_size(dlen); /*alignment + hdr */ | 54 | u16 totlen = nla_total_size(dlen); /*alignment + hdr */ |
55 | char *dptr = (char *)tlv + NLA_HDRLEN; | 55 | char *dptr = (char *)tlv + NLA_HDRLEN; |
56 | u32 htlv = attrtype << 16 | dlen; | 56 | u32 htlv = attrtype << 16 | (dlen + NLA_HDRLEN); |
57 | 57 | ||
58 | *tlv = htonl(htlv); | 58 | *tlv = htonl(htlv); |
59 | memset(dptr, 0, totlen - NLA_HDRLEN); | 59 | memset(dptr, 0, totlen - NLA_HDRLEN); |
@@ -653,7 +653,7 @@ static int tcf_ife_decode(struct sk_buff *skb, const struct tc_action *a, | |||
653 | struct tcf_ife_info *ife = to_ife(a); | 653 | struct tcf_ife_info *ife = to_ife(a); |
654 | int action = ife->tcf_action; | 654 | int action = ife->tcf_action; |
655 | struct ifeheadr *ifehdr = (struct ifeheadr *)skb->data; | 655 | struct ifeheadr *ifehdr = (struct ifeheadr *)skb->data; |
656 | u16 ifehdrln = ifehdr->metalen; | 656 | int ifehdrln = (int)ifehdr->metalen; |
657 | struct meta_tlvhdr *tlv = (struct meta_tlvhdr *)(ifehdr->tlv_data); | 657 | struct meta_tlvhdr *tlv = (struct meta_tlvhdr *)(ifehdr->tlv_data); |
658 | 658 | ||
659 | spin_lock(&ife->tcf_lock); | 659 | spin_lock(&ife->tcf_lock); |
@@ -766,8 +766,6 @@ static int tcf_ife_encode(struct sk_buff *skb, const struct tc_action *a, | |||
766 | return TC_ACT_SHOT; | 766 | return TC_ACT_SHOT; |
767 | } | 767 | } |
768 | 768 | ||
769 | iethh = eth_hdr(skb); | ||
770 | |||
771 | err = skb_cow_head(skb, hdrm); | 769 | err = skb_cow_head(skb, hdrm); |
772 | if (unlikely(err)) { | 770 | if (unlikely(err)) { |
773 | ife->tcf_qstats.drops++; | 771 | ife->tcf_qstats.drops++; |
@@ -778,6 +776,7 @@ static int tcf_ife_encode(struct sk_buff *skb, const struct tc_action *a, | |||
778 | if (!(at & AT_EGRESS)) | 776 | if (!(at & AT_EGRESS)) |
779 | skb_push(skb, skb->dev->hard_header_len); | 777 | skb_push(skb, skb->dev->hard_header_len); |
780 | 778 | ||
779 | iethh = (struct ethhdr *)skb->data; | ||
781 | __skb_push(skb, hdrm); | 780 | __skb_push(skb, hdrm); |
782 | memcpy(skb->data, iethh, skb->mac_len); | 781 | memcpy(skb->data, iethh, skb->mac_len); |
783 | skb_reset_mac_header(skb); | 782 | skb_reset_mac_header(skb); |