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 <joost at jodocus.org> MFC after: 3 days
This commit is contained in:
parent
88b85279a9
commit
ebe609b4a2
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user