summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2005-08-29 09:06:30 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2005-08-29 09:06:30 +0000
commit1caaea641fa3d85058659bc38fd33a2d90bc0e9e (patch)
treeaedcb91b8dab6ae87b92b65a4d4573fda73dc8a2
parent497b59e83ea36879d9ca963ddb903aeb2760629c (diff)
Notes
-rw-r--r--sys/netinet/if_ether.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 434fa7d8ebe6..63ea5457a31a 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -851,6 +851,15 @@ reply:
inet_ntoa(itaddr));
#endif
} else {
+ /*
+ * Return proxied ARP replies only on the interface
+ * where this network resides. Otherwise we may
+ * conflict with the host we are proxying for.
+ */
+ if (rt->rt_ifp != ifp) {
+ RT_UNLOCK(rt);
+ goto drop;
+ }
sdl = SDL(rt->rt_gateway);
(void)memcpy(ar_tha(ah), ar_sha(ah), ah->ar_hln);
(void)memcpy(ar_sha(ah), LLADDR(sdl), ah->ar_hln);