[Oisf-devel] [PATCH] Checksum match: fix logic problem

Victor Julien victor at inliniac.net
Thu Dec 30 18:48:10 UTC 2010


Good catch Eric!

Applied, thanks a lot.

Cheers,
Victor

On 12/29/2010 10:42 PM, Eric Leblond wrote:
> This patch fixes a logic error in the checksum matches. In
> case the protocol is not the one tested, the test must return
> 0 and not 1 (test matched).
> 
> Signed-off-by: Eric Leblond <eric at regit.org>
> ---
>  src/detect-csum.c |   14 +++++++-------
>  1 files changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/src/detect-csum.c b/src/detect-csum.c
> index 652afc4..febb8c7 100644
> --- a/src/detect-csum.c
> +++ b/src/detect-csum.c
> @@ -231,7 +231,7 @@ int DetectIPV4CsumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
>      DetectCsumData *cd = (DetectCsumData *)m->ctx;
>  
>      if (p->ip4h == NULL)
> -        return 1;
> +        return 0;
>  
>      if (p->ip4c.comp_csum == -1)
>          p->ip4c.comp_csum = IPV4CalculateChecksum((uint16_t *)p->ip4h,
> @@ -321,7 +321,7 @@ int DetectTCPV4CsumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
>      DetectCsumData *cd = (DetectCsumData *)m->ctx;
>  
>      if (p->ip4h == NULL || p->proto != IPPROTO_TCP)
> -        return 1;
> +        return 0;
>  
>      if (p->tcpc.comp_csum == -1)
>          p->tcpc.comp_csum = TCPCalculateChecksum((uint16_t *)&(p->ip4h->ip_src),
> @@ -413,7 +413,7 @@ int DetectTCPV6CsumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
>      DetectCsumData *cd = (DetectCsumData *)m->ctx;
>  
>      if (p->ip6h == NULL || p->proto != IPPROTO_TCP)
> -        return 1;
> +        return 0;
>  
>      if (p->tcpc.comp_csum == -1)
>          p->tcpc.comp_csum = TCPV6CalculateChecksum((uint16_t *)&(p->ip6h->ip6_src),
> @@ -505,7 +505,7 @@ int DetectUDPV4CsumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
>      DetectCsumData *cd = (DetectCsumData *)m->ctx;
>  
>      if (p->ip4h == NULL || p->proto != IPPROTO_UDP)
> -        return 1;
> +        return 0;
>  
>      if (p->udpc.comp_csum == -1)
>          p->udpc.comp_csum = UDPV4CalculateChecksum((uint16_t *)&(p->ip4h->ip_src),
> @@ -597,7 +597,7 @@ int DetectUDPV6CsumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
>      DetectCsumData *cd = (DetectCsumData *)m->ctx;
>  
>      if (p->ip6h == NULL || p->proto != IPPROTO_UDP)
> -        return 1;
> +        return 0;
>  
>      if (p->udpc.comp_csum == -1)
>          p->udpc.comp_csum = UDPV6CalculateChecksum((uint16_t *)&(p->ip6h->ip6_src),
> @@ -689,7 +689,7 @@ int DetectICMPV4CsumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
>      DetectCsumData *cd = (DetectCsumData *)m->ctx;
>  
>      if (p->ip4h == NULL || p->proto != IPPROTO_ICMP)
> -        return 1;
> +        return 0;
>  
>      if (p->icmpv4c.comp_csum == -1)
>          p->icmpv4c.comp_csum = ICMPV4CalculateChecksum((uint16_t *)p->icmpv4h,
> @@ -780,7 +780,7 @@ int DetectICMPV6CsumMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
>      DetectCsumData *cd = (DetectCsumData *)m->ctx;
>  
>      if (p->ip6h == NULL || p->proto != IPPROTO_ICMPV6)
> -        return 1;
> +        return 0;
>  
>      if (p->icmpv6c.comp_csum == -1)
>          p->icmpv6c.comp_csum = ICMPV6CalculateChecksum((uint16_t *)&(p->ip6h->ip6_src),


-- 
---------------------------------------------
Victor Julien
http://www.inliniac.net/
PGP: http://www.inliniac.net/victorjulien.asc
---------------------------------------------




More information about the Oisf-devel mailing list