Mercurial > hg > dhcpcd
changeset 5261:33324d44a2e8 draft
privsep: Pass BPF flags via ps_flags
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Sun, 24 May 2020 10:36:14 +0000 |
| parents | 7571d82b48da |
| children | f168a25dd330 |
| files | src/privsep-bpf.c |
| diffstat | 1 files changed, 5 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/privsep-bpf.c Sun May 24 10:30:23 2020 +0000 +++ b/src/privsep-bpf.c Sun May 24 10:36:14 2020 +0000 @@ -63,7 +63,7 @@ { struct ps_process *psp = arg; struct bpf *bpf = psp->psp_bpf; - uint8_t buf[sizeof(bpf->bpf_flags) + FRAMELEN_MAX]; + uint8_t buf[FRAMELEN_MAX]; ssize_t len; struct ps_msghdr psm = { .ps_id = psp->psp_id, @@ -74,14 +74,12 @@ /* A BPF read can read more than one filtered packet at time. * This mechanism allows us to read each packet from the buffer. */ while (!(bpf->bpf_flags & BPF_EOF)) { - len = bpf_read(bpf, - buf + sizeof(bpf->bpf_flags), - sizeof(buf) - sizeof(bpf->bpf_flags)); + len = bpf_read(bpf, buf, sizeof(buf)); if (len == -1) logerr(__func__); if (len == -1 || len == 0) break; - memcpy(buf, &bpf->bpf_flags, sizeof(bpf->bpf_flags)); + psm.ps_flags = bpf->bpf_flags; len = ps_sendpsmdata(psp->psp_ctx, psp->psp_ctx->ps_data_fd, &psm, buf, (size_t)len + sizeof(bpf->bpf_flags)); if (len == -1 && errno != ECONNRESET) @@ -282,23 +280,19 @@ struct interface *ifp; uint8_t *bpf; size_t bpf_len; - unsigned int bpf_flags; ifp = if_findindex(ctx->ifaces, psm->ps_id.psi_ifindex); bpf = iov->iov_base; bpf_len = iov->iov_len; - memcpy(&bpf_flags, bpf, sizeof(bpf_flags)); - bpf += sizeof(bpf_flags); - bpf_len -= sizeof(bpf_flags); switch (psm->ps_cmd) { #ifdef ARP case PS_BPF_ARP: - arp_packet(ifp, bpf, bpf_len, bpf_flags); + arp_packet(ifp, bpf, bpf_len, (unsigned int)psm->ps_flags); break; #endif case PS_BPF_BOOTP: - dhcp_packet(ifp, bpf, bpf_len, bpf_flags); + dhcp_packet(ifp, bpf, bpf_len, (unsigned int)psm->ps_flags); break; default: errno = ENOTSUP;
