diff options
author | jkim <jkim@FreeBSD.org> | 2006-01-03 20:26:03 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2006-01-03 20:26:03 +0000 |
commit | ae104d9814b199542431e6bc4bd83c1a9efdde8a (patch) | |
tree | 39c7a2b61e95daae0a092f19a5bc00725b0b46a8 | |
parent | d339804fc16b1cfac17acb0d33520ec14d3b90da (diff) | |
download | FreeBSD-src-ae104d9814b199542431e6bc4bd83c1a9efdde8a.zip FreeBSD-src-ae104d9814b199542431e6bc4bd83c1a9efdde8a.tar.gz |
- Explicitly validate an empty filter to match bpf_filter() comment[1].
- Do not use BPF JIT compiler for an empty filter.
[1] Pointed out by: darrenr
-rw-r--r-- | sys/amd64/amd64/bpf_jit_machdep.c | 4 | ||||
-rw-r--r-- | sys/i386/i386/bpf_jit_machdep.c | 4 | ||||
-rw-r--r-- | sys/net/bpf_filter.c | 2 |
3 files changed, 9 insertions, 1 deletions
diff --git a/sys/amd64/amd64/bpf_jit_machdep.c b/sys/amd64/amd64/bpf_jit_machdep.c index 9c0c15b..b8c5190 100644 --- a/sys/amd64/amd64/bpf_jit_machdep.c +++ b/sys/amd64/amd64/bpf_jit_machdep.c @@ -103,6 +103,10 @@ 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 */ stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int), M_BPFJIT, M_NOWAIT); diff --git a/sys/i386/i386/bpf_jit_machdep.c b/sys/i386/i386/bpf_jit_machdep.c index 1465ce5..362569e 100644 --- a/sys/i386/i386/bpf_jit_machdep.c +++ b/sys/i386/i386/bpf_jit_machdep.c @@ -103,6 +103,10 @@ 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 */ stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int), M_BPFJIT, M_NOWAIT); diff --git a/sys/net/bpf_filter.c b/sys/net/bpf_filter.c index 0a4c67e..40b54bf 100644 --- a/sys/net/bpf_filter.c +++ b/sys/net/bpf_filter.c @@ -521,7 +521,7 @@ bpf_validate(f, len) register const struct bpf_insn *p; if (len < 1) - return 0; + return 1; for (i = 0; i < len; ++i) { /* |