From ebe609b4a27915450777936bd6b50e685531a647 Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Tue, 26 Sep 2006 01:02:02 +0000 Subject: It is possible for bpf to return a length such that: length != BPF_WORDALIGN(length) This meeans that it is possible for this to be true: interface->rbuf_offset > interface->rbuf_len Handle this case in the test for running out of packets. While OpenBSD's solution of setting interface->rbuf_len to BPF_WORDALIGN(length) is safe due to the size of the buffer, I think this solution results in less hidden assumptions. This should fix the problem of dhclient running away and consuming 100% CPU. PR: bin/102226 Submitted by: Joost Bekkers MFC after: 3 days --- sbin/dhclient/bpf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbin/dhclient/bpf.c b/sbin/dhclient/bpf.c index 785db2195a77..43122fb8972b 100644 --- a/sbin/dhclient/bpf.c +++ b/sbin/dhclient/bpf.c @@ -282,7 +282,7 @@ receive_packet(struct interface_info *interface, unsigned char *buf, */ do { /* If the buffer is empty, fill it. */ - if (interface->rbuf_offset == interface->rbuf_len) { + if (interface->rbuf_offset >= interface->rbuf_len) { length = read(interface->rfdesc, interface->rbuf, interface->rbuf_max); if (length <= 0) -- cgit v1.2.3