diff options
author | Stefan Sperling <stsp@cvs.openbsd.org> | 2016-07-23 15:53:20 +0000 |
---|---|---|
committer | Stefan Sperling <stsp@cvs.openbsd.org> | 2016-07-23 15:53:20 +0000 |
commit | 16b08c0aa94db2df1de2e9c67e3d66fa99112153 (patch) | |
tree | 275eea9d9af92d8252fc76203fbeef39317d2da8 /sbin/dhclient/bpf.c | |
parent | cfd725726cc1ee7e0b52b96e63098772f06ca8f4 (diff) |
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@
Diffstat (limited to 'sbin/dhclient/bpf.c')
-rw-r--r-- | sbin/dhclient/bpf.c | 31 |
1 files changed, 2 insertions, 29 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", |