From 9e8aad6a698ab1d4415eea25660a82cc7fb2e4ca Mon Sep 17 00:00:00 2001 From: stsp Date: Sat, 23 Jul 2016 15:53:19 +0000 Subject: [PATCH] Back out the dhclient BPF change. There are DHCP servers out there which send frames to the ethernet broadcast address, so this will need some more thought and it's too late for 6.0. Problem reported by Holger Mikolon. ok mpi@ --- sbin/dhclient/bpf.c | 31 ++----------------------------- sbin/dhclient/dhclient.c | 3 +-- 2 files changed, 3 insertions(+), 31 deletions(-) diff --git a/sbin/dhclient/bpf.c b/sbin/dhclient/bpf.c index 379af942279..aa2e5c11839 100644 --- a/sbin/dhclient/bpf.c +++ b/sbin/dhclient/bpf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bpf.c,v 1.41 2016/07/19 17:23:20 krw Exp $ */ +/* $OpenBSD: bpf.c,v 1.42 2016/07/23 15:53:19 stsp Exp $ */ /* BPF socket interface code, originally contributed by Archie Cobbs. */ @@ -114,27 +114,8 @@ if_register_send(void) * * XXX: Changes to the filter program may require changes to the * constant offsets used in if_register_receive to patch the BPF program! - * - * Adapted from script shown by - * - * tcpdump -d 'ether dst 00:00:00:00:00:00 ip proto \udp dst port 67' - * - * NOTE: tcpdump shows absolute jumps and relative jumps are required here! */ struct bpf_insn dhcp_bpf_filter[] = { - /* - * Make sure this is directed to our MAC. - * a) compare last 4 octets - * b) compare first 2 octets - * - * NOTE: MAC value must be patched in! - */ - - BPF_STMT(BPF_LD + BPF_W + BPF_ABS, 2), - BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0x00000000, 0, 12), /* patch */ - BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 0), - BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0x0000, 0, 10), /* patch */ - /* Make sure this is an IP packet. */ BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 12), BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETHERTYPE_IP, 0, 8), @@ -209,8 +190,6 @@ if_register_receive(void) struct bpf_version v; struct bpf_program p; int flag = 1, sz; - uint32_t bits; - uint16_t bits16; /* Open a BPF device and hang it on this interface. */ ifi->bfdesc = if_register_bpf(); @@ -256,13 +235,7 @@ if_register_receive(void) * XXX: changes to filter program may require changes to the * insn number(s) used below! */ - memcpy(&bits, ((uint8_t *)&ifi->hw_address) + 2, sizeof(bits)); - dhcp_bpf_filter[1].k = ntohl(bits); - - memcpy(&bits16, ((uint8_t *)&ifi->hw_address), sizeof(bits16)); - dhcp_bpf_filter[3].k = ntohs(bits16); - - dhcp_bpf_filter[12].k = LOCAL_PORT; + dhcp_bpf_filter[8].k = LOCAL_PORT; if (ioctl(ifi->bfdesc, BIOCSETF, &p) < 0) error("Can't install packet filter program: %s", diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c index 804fc095b7b..d2592cf4f88 100644 --- a/sbin/dhclient/dhclient.c +++ b/sbin/dhclient/dhclient.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dhclient.c,v 1.378 2016/07/22 13:23:38 krw Exp $ */ +/* $OpenBSD: dhclient.c,v 1.379 2016/07/23 15:53:19 stsp Exp $ */ /* * Copyright 2004 Henning Brauer @@ -603,7 +603,6 @@ main(int argc, char *argv[]) error("setsockopt(ROUTE_TABLEFILTER): %s", strerror(errno)); /* Register the interface. */ - get_hw_address(); if_register_receive(); if_register_send(); -- 2.20.1