diff options
author | Jing Min Zhao <zhaojingmin@vivecode.com> | 2007-07-08 01:13:17 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-07-11 01:16:54 -0400 |
commit | 558585aad0c0ef83d3d14a1c7576b1e404ca1fbc (patch) | |
tree | c0c196e304373addcb4562fd84067ecd29da5d44 | |
parent | 067b207b281db5e3f03f8d244286c20f61aa2343 (diff) |
[NETFILTER]: nf_conntrack_h323: check range first in sequence extension
Check range before checking STOP flag. This optimization may save a
nanosecond or less :)
Signed-off-by: Jing Min Zhao <zhaojingmin@vivecode.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/netfilter/nf_conntrack_h323_asn1.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/net/netfilter/nf_conntrack_h323_asn1.c b/net/netfilter/nf_conntrack_h323_asn1.c index 6b7eaa019d4c..a869403b2294 100644 --- a/net/netfilter/nf_conntrack_h323_asn1.c +++ b/net/netfilter/nf_conntrack_h323_asn1.c | |||
@@ -555,15 +555,6 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level) | |||
555 | 555 | ||
556 | /* Decode the extension components */ | 556 | /* Decode the extension components */ |
557 | for (opt = 0; opt < bmp2_len; opt++, i++, son++) { | 557 | for (opt = 0; opt < bmp2_len; opt++, i++, son++) { |
558 | if (i < f->ub && son->attr & STOP) { | ||
559 | PRINT("%*.s%s\n", (level + 1) * TAB_SIZE, " ", | ||
560 | son->name); | ||
561 | return H323_ERROR_STOP; | ||
562 | } | ||
563 | |||
564 | if (!((0x80000000 >> opt) & bmp2)) /* Not present */ | ||
565 | continue; | ||
566 | |||
567 | /* Check Range */ | 558 | /* Check Range */ |
568 | if (i >= f->ub) { /* Newer Version? */ | 559 | if (i >= f->ub) { /* Newer Version? */ |
569 | CHECK_BOUND(bs, 2); | 560 | CHECK_BOUND(bs, 2); |
@@ -573,6 +564,15 @@ int decode_seq(bitstr_t * bs, field_t * f, char *base, int level) | |||
573 | continue; | 564 | continue; |
574 | } | 565 | } |
575 | 566 | ||
567 | if (son->attr & STOP) { | ||
568 | PRINT("%*.s%s\n", (level + 1) * TAB_SIZE, " ", | ||
569 | son->name); | ||
570 | return H323_ERROR_STOP; | ||
571 | } | ||
572 | |||
573 | if (!((0x80000000 >> opt) & bmp2)) /* Not present */ | ||
574 | continue; | ||
575 | |||
576 | CHECK_BOUND(bs, 2); | 576 | CHECK_BOUND(bs, 2); |
577 | len = get_len(bs); | 577 | len = get_len(bs); |
578 | CHECK_BOUND(bs, len); | 578 | CHECK_BOUND(bs, len); |