|
@@ -53,7 +53,7 @@ int ife_tlv_meta_encode(void *skbdata, u16 attrtype, u16 dlen, const void *dval)
|
|
|
u32 *tlv = (u32 *)(skbdata);
|
|
|
u16 totlen = nla_total_size(dlen); /*alignment + hdr */
|
|
|
char *dptr = (char *)tlv + NLA_HDRLEN;
|
|
|
- u32 htlv = attrtype << 16 | dlen;
|
|
|
+ u32 htlv = attrtype << 16 | (dlen + NLA_HDRLEN);
|
|
|
|
|
|
*tlv = htonl(htlv);
|
|
|
memset(dptr, 0, totlen - NLA_HDRLEN);
|
|
@@ -627,7 +627,7 @@ static int tcf_ife_decode(struct sk_buff *skb, const struct tc_action *a,
|
|
|
struct tcf_ife_info *ife = to_ife(a);
|
|
|
int action = ife->tcf_action;
|
|
|
struct ifeheadr *ifehdr = (struct ifeheadr *)skb->data;
|
|
|
- u16 ifehdrln = ifehdr->metalen;
|
|
|
+ int ifehdrln = (int)ifehdr->metalen;
|
|
|
struct meta_tlvhdr *tlv = (struct meta_tlvhdr *)(ifehdr->tlv_data);
|
|
|
|
|
|
spin_lock(&ife->tcf_lock);
|