aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/ip_gre.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/ip_gre.c')
-rw-r--r--net/ipv4/ip_gre.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 594cec35ac4d..0c3123566d76 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -528,6 +528,9 @@ static void ipgre_err(struct sk_buff *skb, u32 info)
528 if (code != ICMP_EXC_TTL) 528 if (code != ICMP_EXC_TTL)
529 return; 529 return;
530 break; 530 break;
531
532 case ICMP_REDIRECT:
533 break;
531 } 534 }
532 535
533 rcu_read_lock(); 536 rcu_read_lock();
@@ -543,7 +546,11 @@ static void ipgre_err(struct sk_buff *skb, u32 info)
543 t->parms.link, 0, IPPROTO_GRE, 0); 546 t->parms.link, 0, IPPROTO_GRE, 0);
544 goto out; 547 goto out;
545 } 548 }
546 549 if (type == ICMP_REDIRECT) {
550 ipv4_redirect(skb, dev_net(skb->dev), t->parms.link, 0,
551 IPPROTO_GRE, 0);
552 goto out;
553 }
547 if (t->parms.iph.daddr == 0 || 554 if (t->parms.iph.daddr == 0 ||
548 ipv4_is_multicast(t->parms.iph.daddr)) 555 ipv4_is_multicast(t->parms.iph.daddr))
549 goto out; 556 goto out;