diff options
author | Jiri Pirko <jiri@resnulli.us> | 2015-01-13 11:13:43 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-01-13 17:51:08 -0500 |
commit | d8b9605d2697c48fb822c821c5751afbb4567003 (patch) | |
tree | e9c4cbcafae686743acae5cd834086735e31aa7a /net/sched/sch_teql.c | |
parent | 8bdda5ddd1f1590ae24002749adb72693b80baaf (diff) |
net: sched: fix skb->protocol use in case of accelerated vlan path
tc code implicitly considers skb->protocol even in case of accelerated
vlan paths and expects vlan protocol type here. However, on rx path,
if the vlan header was already stripped, skb->protocol contains value
of next header. Similar situation is on tx path.
So for skbs that use skb->vlan_tci for tagging, use skb->vlan_proto instead.
Reported-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_teql.c')
-rw-r--r-- | net/sched/sch_teql.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c index 4899d4a18aa5..e02687185a59 100644 --- a/net/sched/sch_teql.c +++ b/net/sched/sch_teql.c | |||
@@ -242,8 +242,8 @@ __teql_resolve(struct sk_buff *skb, struct sk_buff *skb_res, | |||
242 | char haddr[MAX_ADDR_LEN]; | 242 | char haddr[MAX_ADDR_LEN]; |
243 | 243 | ||
244 | neigh_ha_snapshot(haddr, n, dev); | 244 | neigh_ha_snapshot(haddr, n, dev); |
245 | err = dev_hard_header(skb, dev, ntohs(skb->protocol), haddr, | 245 | err = dev_hard_header(skb, dev, ntohs(tc_skb_protocol(skb)), |
246 | NULL, skb->len); | 246 | haddr, NULL, skb->len); |
247 | 247 | ||
248 | if (err < 0) | 248 | if (err < 0) |
249 | err = -EINVAL; | 249 | err = -EINVAL; |