Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e032e32 authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by David S. Miller
Browse files

[IPV6] NDISC: Take source address into account for redirects.

parent a57d27fc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ extern int rt6_route_rcv(struct net_device *dev,
					      struct in6_addr *gwaddr);

extern void			rt6_redirect(struct in6_addr *dest,
					     struct in6_addr *src,
					     struct in6_addr *saddr,
					     struct neighbour *neigh,
					     u8 *lladdr,
+2 −1
Original line number Diff line number Diff line
@@ -1346,7 +1346,8 @@ static void ndisc_redirect_rcv(struct sk_buff *skb)

	neigh = __neigh_lookup(&nd_tbl, target, skb->dev, 1);
	if (neigh) {
		rt6_redirect(dest, &skb->nh.ipv6h->saddr, neigh, lladdr, 
		rt6_redirect(dest, &skb->nh.ipv6h->daddr,
			     &skb->nh.ipv6h->saddr, neigh, lladdr,
			     on_link);
		neigh_release(neigh);
	}
+3 −2
Original line number Diff line number Diff line
@@ -1279,7 +1279,8 @@ static int ip6_route_del(struct fib6_config *cfg)
/*
 *	Handle redirects
 */
void rt6_redirect(struct in6_addr *dest, struct in6_addr *saddr,
void rt6_redirect(struct in6_addr *dest, struct in6_addr *src,
		  struct in6_addr *saddr,
		  struct neighbour *neigh, u8 *lladdr, int on_link)
{
	struct rt6_info *rt, *nrt = NULL;
@@ -1304,7 +1305,7 @@ void rt6_redirect(struct in6_addr *dest, struct in6_addr *saddr,
	 */

	read_lock_bh(&table->tb6_lock);
	fn = fib6_lookup(&table->tb6_root, dest, NULL);
	fn = fib6_lookup(&table->tb6_root, dest, src);
restart:
	for (rt = fn->leaf; rt; rt = rt->u.next) {
		/*