aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/core/dev.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index dab97c7cf275..600bb23c4c2e 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2210,7 +2210,8 @@ int netif_receive_skb(struct sk_buff *skb)
2210#endif 2210#endif
2211 2211
2212 list_for_each_entry_rcu(ptype, &ptype_all, list) { 2212 list_for_each_entry_rcu(ptype, &ptype_all, list) {
2213 if (ptype->dev == null_or_orig || ptype->dev == skb->dev) { 2213 if (ptype->dev == null_or_orig || ptype->dev == skb->dev ||
2214 ptype->dev == orig_dev) {
2214 if (pt_prev) 2215 if (pt_prev)
2215 ret = deliver_skb(skb, pt_prev, orig_dev); 2216 ret = deliver_skb(skb, pt_prev, orig_dev);
2216 pt_prev = ptype; 2217 pt_prev = ptype;
@@ -2235,7 +2236,8 @@ ncls:
2235 list_for_each_entry_rcu(ptype, 2236 list_for_each_entry_rcu(ptype,
2236 &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) { 2237 &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
2237 if (ptype->type == type && 2238 if (ptype->type == type &&
2238 (ptype->dev == null_or_orig || ptype->dev == skb->dev)) { 2239 (ptype->dev == null_or_orig || ptype->dev == skb->dev ||
2240 ptype->dev == orig_dev)) {
2239 if (pt_prev) 2241 if (pt_prev)
2240 ret = deliver_skb(skb, pt_prev, orig_dev); 2242 ret = deliver_skb(skb, pt_prev, orig_dev);
2241 pt_prev = ptype; 2243 pt_prev = ptype;