diff options
author | jkim <jkim@FreeBSD.org> | 2008-08-29 01:47:45 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2008-08-29 01:47:45 +0000 |
commit | 4d92376beb265d57d97fddd06a32688671a64c3f (patch) | |
tree | 7b81d13449737dd68b3df0f7bfdf3c0bcc8c029f /sys/net | |
parent | b08de3bf2f23d145400d0560e99a4af360b88d47 (diff) | |
download | FreeBSD-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.c | 13 |
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; } /* |