This diff makes dhcrelay(8) drop packets that were not meant for us.
This is a safety check suggested by jca@ to avoid relaying packets with
the address of other relays.

ok?

Index: dhcrelay.c
===================================================================
RCS file: /cvs/src/usr.sbin/dhcrelay/dhcrelay.c,v
retrieving revision 1.49
diff -u -p -r1.49 dhcrelay.c
--- dhcrelay.c  8 Dec 2016 19:18:15 -0000       1.49
+++ dhcrelay.c  8 Dec 2016 19:52:51 -0000
@@ -276,6 +276,11 @@ relay(struct interface_info *ip, struct 
 
        /* If it's a bootreply, forward it to the client. */
        if (packet->op == BOOTREPLY) {
+               /* Filter packet that were not meant for us. */
+               if (packet->giaddr.s_addr !=
+                   interfaces->primary_address.s_addr)
+                       return;
+
                bzero(&to, sizeof(to));
                if (!(packet->flags & htons(BOOTP_BROADCAST))) {
                        to.sin_addr = packet->yiaddr;

Reply via email to