lkml.org 
[lkml]   [2020]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 200/312] netfilter: nft_dup: do not use sreg_dev if the user doesnt specify it
    Date
    From: Liping Zhang <zlpnobody@gmail.com>

    commit b73b8a1ba598236296a46103d81c10d629d9a470 upstream.

    The NFTA_DUP_SREG_DEV attribute is not a must option, so we should use it
    in routing lookup only when the user specify it.

    Fixes: d877f07112f1 ("netfilter: nf_tables: add nft_dup expression")
    Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/ipv4/netfilter/nft_dup_ipv4.c | 6 ++++--
    net/ipv6/netfilter/nft_dup_ipv6.c | 6 ++++--
    2 files changed, 8 insertions(+), 4 deletions(-)

    --- a/net/ipv4/netfilter/nft_dup_ipv4.c
    +++ b/net/ipv4/netfilter/nft_dup_ipv4.c
    @@ -28,7 +28,7 @@ static void nft_dup_ipv4_eval(const stru
    struct in_addr gw = {
    .s_addr = (__force __be32)regs->data[priv->sreg_addr],
    };
    - int oif = regs->data[priv->sreg_dev];
    + int oif = priv->sreg_dev ? regs->data[priv->sreg_dev] : -1;

    nf_dup_ipv4(pkt->net, pkt->skb, pkt->hook, &gw, oif);
    }
    @@ -59,7 +59,9 @@ static int nft_dup_ipv4_dump(struct sk_b
    {
    struct nft_dup_ipv4 *priv = nft_expr_priv(expr);

    - if (nft_dump_register(skb, NFTA_DUP_SREG_ADDR, priv->sreg_addr) ||
    + if (nft_dump_register(skb, NFTA_DUP_SREG_ADDR, priv->sreg_addr))
    + goto nla_put_failure;
    + if (priv->sreg_dev &&
    nft_dump_register(skb, NFTA_DUP_SREG_DEV, priv->sreg_dev))
    goto nla_put_failure;

    --- a/net/ipv6/netfilter/nft_dup_ipv6.c
    +++ b/net/ipv6/netfilter/nft_dup_ipv6.c
    @@ -26,7 +26,7 @@ static void nft_dup_ipv6_eval(const stru
    {
    struct nft_dup_ipv6 *priv = nft_expr_priv(expr);
    struct in6_addr *gw = (struct in6_addr *)&regs->data[priv->sreg_addr];
    - int oif = regs->data[priv->sreg_dev];
    + int oif = priv->sreg_dev ? regs->data[priv->sreg_dev] : -1;

    nf_dup_ipv6(pkt->net, pkt->skb, pkt->hook, gw, oif);
    }
    @@ -57,7 +57,9 @@ static int nft_dup_ipv6_dump(struct sk_b
    {
    struct nft_dup_ipv6 *priv = nft_expr_priv(expr);

    - if (nft_dump_register(skb, NFTA_DUP_SREG_ADDR, priv->sreg_addr) ||
    + if (nft_dump_register(skb, NFTA_DUP_SREG_ADDR, priv->sreg_addr))
    + goto nla_put_failure;
    + if (priv->sreg_dev &&
    nft_dump_register(skb, NFTA_DUP_SREG_DEV, priv->sreg_dev))
    goto nla_put_failure;


    \
     
     \ /
      Last update: 2020-05-08 15:18    [W:2.681 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site