Re: [PATCH net-next 1/1] netfilter: xt_multiport: Fix wrong unmatch result with multiple ports

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Nov 25, 2016 at 11:58 AM,  <fgao@xxxxxxxxxx> wrote:
> From: Gao Feng <fgao@xxxxxxxxxx>
>
> I lost one test case in the commit for xt_multiport.
> For example, the rule is "-m multiport --dports 22,80,443".
> When first port is unmatched and the second is matched, the curent codes
> could not return the right result.
> It would return false directly when the first port is unmatched.
>
> Fixes: dd2602d00f80 ("netfilter: xt_multiport: Use switch case instead
> of multiple condition checks")
>
> Signed-off-by: Gao Feng <fgao@xxxxxxxxxx>
> ---
>  net/netfilter/xt_multiport.c | 28 +++++++++++++++++++---------
>  1 file changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/net/netfilter/xt_multiport.c b/net/netfilter/xt_multiport.c
> index ec06fb1..a99da44 100644
> --- a/net/netfilter/xt_multiport.c
> +++ b/net/netfilter/xt_multiport.c
> @@ -41,29 +41,39 @@
>                         /* range port matching */
>                         e = minfo->ports[++i];
>                         pr_debug("src or dst matches with %d-%d?\n", s, e);
> -
>                         switch (minfo->flags) {
>                         case XT_MULTIPORT_SOURCE:
> -                               return (src >= s && src <= e) ^ minfo->invert;
> +                               if (src >= s && src <= e)
> +                                       return true ^ minfo->invert;
> +                               break;
>                         case XT_MULTIPORT_DESTINATION:
> -                               return (dst >= s && dst <= e) ^ minfo->invert;
> +                               if (dst >= s && dst <= e)
> +                                       return true ^ minfo->invert;
> +                               break;
>                         case XT_MULTIPORT_EITHER:
> -                               return ((dst >= s && dst <= e) ||
> -                                       (src >= s && src <= e)) ^ minfo->invert;
> +                               if ((dst >= s && dst <= e) ||
> +                                   (src >= s && src <= e))
> +                                       return true ^ minfo->invert;
> +                               break;
>                         default:
>                                 break;
>                         }
>                 } else {
>                         /* exact port matching */
>                         pr_debug("src or dst matches with %d?\n", s);
> -
>                         switch (minfo->flags) {
>                         case XT_MULTIPORT_SOURCE:
> -                               return (src == s) ^ minfo->invert;
> +                               if (src == s)
> +                                       return true ^ minfo->invert;
> +                               break;
>                         case XT_MULTIPORT_DESTINATION:
> -                               return (dst == s) ^ minfo->invert;
> +                               if (dst == s)
> +                                       return true ^ minfo->invert;
> +                               break;
>                         case XT_MULTIPORT_EITHER:
> -                               return (src == s || dst == s) ^ minfo->invert;
> +                               if (src == s || dst == s)
> +                                       return true ^ minfo->invert;
> +                               break;
>                         default:
>                                 break;
>                         }
> --
> 1.9.1
>
>

Sorry, please ignore this commit.
I write wrong title. It should be for "nf-next", not "net-next".
And this patch removed two space lines.

Regards
Feng
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux