Date: Fri, 20 Nov 2009 21:12:40 +0000 (UTC) From: Jung-uk Kim <jkim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r199615 - in head/sys: amd64/amd64 i386/i386 net Message-ID: <200911202112.nAKLCe35056653@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jkim Date: Fri Nov 20 21:12:40 2009 New Revision: 199615 URL: http://svn.freebsd.org/changeset/base/199615 Log: General style cleanup, no functional change. Modified: head/sys/amd64/amd64/bpf_jit_machdep.c head/sys/i386/i386/bpf_jit_machdep.c head/sys/net/bpf_jitter.c Modified: head/sys/amd64/amd64/bpf_jit_machdep.c ============================================================================== --- head/sys/amd64/amd64/bpf_jit_machdep.c Fri Nov 20 20:43:34 2009 (r199614) +++ head/sys/amd64/amd64/bpf_jit_machdep.c Fri Nov 20 21:12:40 2009 (r199615) @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #else #include <stdlib.h> +#include <string.h> #include <sys/mman.h> #include <sys/param.h> #endif @@ -104,38 +105,38 @@ bpf_jit_compile(struct bpf_insn *prog, u u_int i, pass; /* - * NOTE: do not modify the name of this variable, as it's used by + * NOTE: Do not modify the name of this variable, as it's used by * the macros to emit code. */ emit_func emitm; - /* Allocate the reference table for the jumps */ + /* Allocate the reference table for the jumps. */ #ifdef _KERNEL - stream.refs = malloc((nins + 1) * sizeof(u_int), M_BPFJIT, M_NOWAIT); + stream.refs = malloc((nins + 1) * sizeof(u_int), M_BPFJIT, + M_NOWAIT | M_ZERO); #else stream.refs = malloc((nins + 1) * sizeof(u_int)); #endif if (stream.refs == NULL) return (NULL); - - /* Reset the reference table */ - for (i = 0; i < nins + 1; i++) - stream.refs[i] = 0; +#ifndef _KERNEL + memset(stream.refs, 0, (nins + 1) * sizeof(u_int)); +#endif stream.cur_ip = 0; stream.bpf_pc = 0; + stream.ibuf = NULL; /* - * the first pass will emit the lengths of the instructions - * to create the reference table + * The first pass will emit the lengths of the instructions + * to create the reference table. */ emitm = emit_length; - pass = 0; - for (;;) { + for (pass = 0; pass < 2; pass++) { ins = prog; - /* create the procedure header */ + /* Create the procedure header. */ PUSH(RBP); MOVrq(RSP, RBP); SUBib(BPF_MEMWORDS * sizeof(uint32_t), RSP); @@ -470,25 +471,16 @@ bpf_jit_compile(struct bpf_insn *prog, u ins++; } - pass++; - if (pass >= 2) { -#ifndef _KERNEL - if (mprotect(stream.ibuf, stream.cur_ip, - PROT_READ | PROT_EXEC) != 0) { - munmap(stream.ibuf, stream.cur_ip); - stream.ibuf = NULL; - } -#endif - *size = stream.cur_ip; - break; - } + if (pass > 0) + continue; + *size = stream.cur_ip; #ifdef _KERNEL - stream.ibuf = malloc(stream.cur_ip, M_BPFJIT, M_NOWAIT); + stream.ibuf = malloc(*size, M_BPFJIT, M_NOWAIT); if (stream.ibuf == NULL) break; #else - stream.ibuf = mmap(NULL, stream.cur_ip, PROT_READ | PROT_WRITE, + stream.ibuf = mmap(NULL, *size, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0); if (stream.ibuf == MAP_FAILED) { stream.ibuf = NULL; @@ -497,28 +489,33 @@ bpf_jit_compile(struct bpf_insn *prog, u #endif /* - * modify the reference table to contain the offsets and - * not the lengths of the instructions + * Modify the reference table to contain the offsets and + * not the lengths of the instructions. */ for (i = 1; i < nins + 1; i++) stream.refs[i] += stream.refs[i - 1]; - /* Reset the counters */ + /* Reset the counters. */ stream.cur_ip = 0; stream.bpf_pc = 0; - /* the second pass creates the actual code */ + /* The second pass creates the actual code. */ emitm = emit_code; } /* - * the reference table is needed only during compilation, - * now we can free it + * The reference table is needed only during compilation, + * now we can free it. */ #ifdef _KERNEL free(stream.refs, M_BPFJIT); #else free(stream.refs); + if (stream.ibuf != NULL && + mprotect(stream.ibuf, *size, PROT_READ | PROT_EXEC) != 0) { + munmap(stream.ibuf, *size); + stream.ibuf = NULL; + } #endif return ((bpf_filter_func)stream.ibuf); Modified: head/sys/i386/i386/bpf_jit_machdep.c ============================================================================== --- head/sys/i386/i386/bpf_jit_machdep.c Fri Nov 20 20:43:34 2009 (r199614) +++ head/sys/i386/i386/bpf_jit_machdep.c Fri Nov 20 21:12:40 2009 (r199615) @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #else #include <stdlib.h> +#include <string.h> #include <sys/mman.h> #include <sys/param.h> #endif @@ -104,38 +105,38 @@ bpf_jit_compile(struct bpf_insn *prog, u u_int i, pass; /* - * NOTE: do not modify the name of this variable, as it's used by + * NOTE: Do not modify the name of this variable, as it's used by * the macros to emit code. */ emit_func emitm; - /* Allocate the reference table for the jumps */ + /* Allocate the reference table for the jumps. */ #ifdef _KERNEL - stream.refs = malloc((nins + 1) * sizeof(u_int), M_BPFJIT, M_NOWAIT); + stream.refs = malloc((nins + 1) * sizeof(u_int), M_BPFJIT, + M_NOWAIT | M_ZERO); #else stream.refs = malloc((nins + 1) * sizeof(u_int)); #endif if (stream.refs == NULL) return (NULL); - - /* Reset the reference table */ - for (i = 0; i < nins + 1; i++) - stream.refs[i] = 0; +#ifndef _KERNEL + memset(stream.refs, 0, (nins + 1) * sizeof(u_int)); +#endif stream.cur_ip = 0; stream.bpf_pc = 0; + stream.ibuf = NULL; /* - * the first pass will emit the lengths of the instructions - * to create the reference table + * The first pass will emit the lengths of the instructions + * to create the reference table. */ emitm = emit_length; - pass = 0; - for (;;) { + for (pass = 0; pass < 2; pass++) { ins = prog; - /* create the procedure header */ + /* Create the procedure header. */ PUSH(EBP); MOVrd(ESP, EBP); SUBib(BPF_MEMWORDS * sizeof(uint32_t), ESP); @@ -503,25 +504,16 @@ bpf_jit_compile(struct bpf_insn *prog, u ins++; } - pass++; - if (pass >= 2) { -#ifndef _KERNEL - if (mprotect(stream.ibuf, stream.cur_ip, - PROT_READ | PROT_EXEC) != 0) { - munmap(stream.ibuf, stream.cur_ip); - stream.ibuf = NULL; - } -#endif - *size = stream.cur_ip; - break; - } + if (pass > 0) + continue; + *size = stream.cur_ip; #ifdef _KERNEL - stream.ibuf = malloc(stream.cur_ip, M_BPFJIT, M_NOWAIT); + stream.ibuf = malloc(*size, M_BPFJIT, M_NOWAIT); if (stream.ibuf == NULL) break; #else - stream.ibuf = mmap(NULL, stream.cur_ip, PROT_READ | PROT_WRITE, + stream.ibuf = mmap(NULL, *size, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0); if (stream.ibuf == MAP_FAILED) { stream.ibuf = NULL; @@ -530,28 +522,33 @@ bpf_jit_compile(struct bpf_insn *prog, u #endif /* - * modify the reference table to contain the offsets and - * not the lengths of the instructions + * Modify the reference table to contain the offsets and + * not the lengths of the instructions. */ for (i = 1; i < nins + 1; i++) stream.refs[i] += stream.refs[i - 1]; - /* Reset the counters */ + /* Reset the counters. */ stream.cur_ip = 0; stream.bpf_pc = 0; - /* the second pass creates the actual code */ + /* The second pass creates the actual code. */ emitm = emit_code; } /* - * the reference table is needed only during compilation, - * now we can free it + * The reference table is needed only during compilation, + * now we can free it. */ #ifdef _KERNEL free(stream.refs, M_BPFJIT); #else free(stream.refs); + if (stream.ibuf != NULL && + mprotect(stream.ibuf, *size, PROT_READ | PROT_EXEC) != 0) { + munmap(stream.ibuf, *size); + stream.ibuf = NULL; + } #endif return ((bpf_filter_func)stream.ibuf); Modified: head/sys/net/bpf_jitter.c ============================================================================== --- head/sys/net/bpf_jitter.c Fri Nov 20 20:43:34 2009 (r199614) +++ head/sys/net/bpf_jitter.c Fri Nov 20 21:12:40 2009 (r199615) @@ -42,7 +42,6 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #else #include <stdlib.h> -#include <string.h> #include <sys/mman.h> #include <sys/param.h> #include <sys/types.h> @@ -62,27 +61,36 @@ SYSCTL_NODE(_net, OID_AUTO, bpf_jitter, int bpf_jitter_enable = 1; SYSCTL_INT(_net_bpf_jitter, OID_AUTO, enable, CTLFLAG_RW, &bpf_jitter_enable, 0, "enable BPF JIT compiler"); +#endif bpf_jit_filter * bpf_jitter(struct bpf_insn *fp, int nins) { bpf_jit_filter *filter; - /* Allocate the filter structure */ + /* Allocate the filter structure. */ +#ifdef _KERNEL filter = (struct bpf_jit_filter *)malloc(sizeof(*filter), M_BPFJIT, M_NOWAIT); +#else + filter = (struct bpf_jit_filter *)malloc(sizeof(*filter)); +#endif if (filter == NULL) return (NULL); - /* No filter means accept all */ + /* No filter means accept all. */ if (fp == NULL || nins == 0) { filter->func = bpf_jit_accept_all; return (filter); } - /* Create the binary */ + /* Create the binary. */ if ((filter->func = bpf_jit_compile(fp, nins, &filter->size)) == NULL) { +#ifdef _KERNEL free(filter, M_BPFJIT); +#else + free(filter); +#endif return (NULL); } @@ -93,45 +101,16 @@ void bpf_destroy_jit_filter(bpf_jit_filter *filter) { +#ifdef _KERNEL if (filter->func != bpf_jit_accept_all) free(filter->func, M_BPFJIT); free(filter, M_BPFJIT); -} #else -bpf_jit_filter * -bpf_jitter(struct bpf_insn *fp, int nins) -{ - bpf_jit_filter *filter; - - /* Allocate the filter structure */ - filter = (struct bpf_jit_filter *)malloc(sizeof(*filter)); - if (filter == NULL) - return (NULL); - - /* No filter means accept all */ - if (fp == NULL || nins == 0) { - filter->func = bpf_jit_accept_all; - return (filter); - } - - /* Create the binary */ - if ((filter->func = bpf_jit_compile(fp, nins, &filter->size)) == NULL) { - free(filter); - return (NULL); - } - - return (filter); -} - -void -bpf_destroy_jit_filter(bpf_jit_filter *filter) -{ - if (filter->func != bpf_jit_accept_all) munmap(filter->func, filter->size); free(filter); -} #endif +} static u_int bpf_jit_accept_all(__unused u_char *p, __unused u_int wirelen,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911202112.nAKLCe35056653>