summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2008-08-29 01:47:45 +0000
committerjkim <jkim@FreeBSD.org>2008-08-29 01:47:45 +0000
commit4d92376beb265d57d97fddd06a32688671a64c3f (patch)
tree7b81d13449737dd68b3df0f7bfdf3c0bcc8c029f /sys/net
parentb08de3bf2f23d145400d0560e99a4af360b88d47 (diff)
downloadFreeBSD-src-4d92376beb265d57d97fddd06a32688671a64c3f.zip
FreeBSD-src-4d92376beb265d57d97fddd06a32688671a64c3f.tar.gz
Simplify jump instruction range checks.
MFC after: 1 month
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/bpf_filter.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/sys/net/bpf_filter.c b/sys/net/bpf_filter.c
index 4064317..813d2f4 100644
--- a/sys/net/bpf_filter.c
+++ b/sys/net/bpf_filter.c
@@ -552,14 +552,13 @@ bpf_validate(f, len)
* the code block.
*/
if (BPF_CLASS(p->code) == BPF_JMP) {
- register int from = i + 1;
+ register u_int offset;
- if (BPF_OP(p->code) == BPF_JA) {
- if (from >= len || p->k >= len - from)
- return 0;
- }
- else if (from >= len || p->jt >= len - from ||
- p->jf >= len - from)
+ if (BPF_OP(p->code) == BPF_JA)
+ offset = p->k;
+ else
+ offset = p->jt > p->jf ? p->jt : p->jf;
+ if (offset >= (u_int)(len - i) - 1)
return 0;
}
/*
OpenPOWER on IntegriCloud