lkml.org 
[lkml]   [2019]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.20 138/183] geneve: should not call rt6_lookup() when ipv6 was disabled
    Date
    4.20-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Hangbin Liu <liuhangbin@gmail.com>

    [ Upstream commit c0a47e44c0980b3b23ee31fa7936d70ea5dce491 ]

    When we add a new GENEVE device with IPv6 remote, checking only for
    IS_ENABLED(CONFIG_IPV6) is not enough as we may disable IPv6 in the
    kernel command line (ipv6.disable=1), and calling rt6_lookup() would
    cause a NULL pointer dereference.

    v2:
    - don't mix declarations and code (reported by Stefano Brivio, Eric Dumazet)
    - there's no need to use in6_dev_get() as we only need to check that
    idev exists (reported by David Ahern). This is under RTNL, so we can
    simply use __in6_dev_get() instead (Stefano, Eric).

    Reported-by: Jianlin Shi <jishi@redhat.com>
    Fixes: c40e89fd358e9 ("geneve: configure MTU based on a lower device")
    Cc: Alexey Kodanev <alexey.kodanev@oracle.com>
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/geneve.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/drivers/net/geneve.c
    +++ b/drivers/net/geneve.c
    @@ -1426,9 +1426,13 @@ static void geneve_link_config(struct ne
    }
    #if IS_ENABLED(CONFIG_IPV6)
    case AF_INET6: {
    - struct rt6_info *rt = rt6_lookup(geneve->net,
    - &info->key.u.ipv6.dst, NULL, 0,
    - NULL, 0);
    + struct rt6_info *rt;
    +
    + if (!__in6_dev_get(dev))
    + break;
    +
    + rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0,
    + NULL, 0);

    if (rt && rt->dst.dev)
    ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV6_HLEN;

    \
     
     \ /
      Last update: 2019-02-25 22:41    [W:4.231 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site