summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2008-08-26 21:06:31 +0000
committerjkim <jkim@FreeBSD.org>2008-08-26 21:06:31 +0000
commite41f677c9fc357d041e7ea3fa4529dbc69aa1cef (patch)
treeca74318b1996d2c0e9fa0138b11cb52643eb9366
parent72e5b4d25146e4f1953c050beff292b051f1ab01 (diff)
downloadFreeBSD-src-e41f677c9fc357d041e7ea3fa4529dbc69aa1cef.zip
FreeBSD-src-e41f677c9fc357d041e7ea3fa4529dbc69aa1cef.tar.gz
Move empty filter handling to MI source.
MFC after: 3 days
-rw-r--r--sys/amd64/amd64/bpf_jit_machdep.c4
-rw-r--r--sys/i386/i386/bpf_jit_machdep.c4
-rw-r--r--sys/net/bpf_jitter.c28
3 files changed, 26 insertions, 10 deletions
diff --git a/sys/amd64/amd64/bpf_jit_machdep.c b/sys/amd64/amd64/bpf_jit_machdep.c
index b8de592..4991a5b 100644
--- a/sys/amd64/amd64/bpf_jit_machdep.c
+++ b/sys/amd64/amd64/bpf_jit_machdep.c
@@ -107,10 +107,6 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
*/
emit_func emitm;
- /* Do not compile an empty filter. */
- if (nins == 0)
- return (NULL);
-
/* Allocate the reference table for the jumps */
#ifdef _KERNEL
stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int),
diff --git a/sys/i386/i386/bpf_jit_machdep.c b/sys/i386/i386/bpf_jit_machdep.c
index aa5c5bd..5d8e034 100644
--- a/sys/i386/i386/bpf_jit_machdep.c
+++ b/sys/i386/i386/bpf_jit_machdep.c
@@ -107,10 +107,6 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
*/
emit_func emitm;
- /* Do not compile an empty filter. */
- if (nins == 0)
- return (NULL);
-
/* Allocate the reference table for the jumps */
#ifdef _KERNEL
stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int),
diff --git a/sys/net/bpf_jitter.c b/sys/net/bpf_jitter.c
index 87a3ab3..d15bc93 100644
--- a/sys/net/bpf_jitter.c
+++ b/sys/net/bpf_jitter.c
@@ -50,6 +50,8 @@ __FBSDID("$FreeBSD$");
bpf_filter_func bpf_jit_compile(struct bpf_insn *, u_int, int *);
+static u_int bpf_jit_accept_all(u_char *, u_int, u_int);
+
#ifdef _KERNEL
MALLOC_DEFINE(M_BPFJIT, "BPF_JIT", "BPF JIT compiler");
@@ -69,6 +71,12 @@ bpf_jitter(struct bpf_insn *fp, int nins)
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->mem)) == NULL) {
free(filter, M_BPFJIT);
@@ -82,7 +90,8 @@ void
bpf_destroy_jit_filter(bpf_jit_filter *filter)
{
- free(filter->func, M_BPFJIT);
+ if (filter->func != bpf_jit_accept_all)
+ free(filter->func, M_BPFJIT);
free(filter, M_BPFJIT);
}
#else
@@ -96,6 +105,12 @@ bpf_jitter(struct bpf_insn *fp, int nins)
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->mem)) == NULL) {
free(filter);
@@ -109,7 +124,16 @@ void
bpf_destroy_jit_filter(bpf_jit_filter *filter)
{
- free(filter->func);
+ if (filter->func != bpf_jit_accept_all)
+ free(filter->func);
free(filter);
}
#endif
+
+static u_int
+bpf_jit_accept_all(__unused u_char *p, __unused u_int wirelen,
+ __unused u_int buflen)
+{
+
+ return ((u_int)-1);
+}
OpenPOWER on IntegriCloud