lkml.org 
[lkml]   [2018]   [Mar]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.15 09/47] macvlan: filter out unsupported feature flags
    Date
    4.15-stable review patch.  If anyone has any objections, please let me know.

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

    From: Shannon Nelson <shannon.nelson@oracle.com>


    [ Upstream commit 13fbcc8dc573482dd3f27568257fd7087f8935f4 ]

    Adding a macvlan device on top of a lowerdev that supports
    the xfrm offloads fails with a new regression:
    # ip link add link ens1f0 mv0 type macvlan
    RTNETLINK answers: Operation not permitted

    Tracing down the failure shows that the macvlan device inherits
    the NETIF_F_HW_ESP and NETIF_F_HW_ESP_TX_CSUM feature flags
    from the lowerdev, but with no dev->xfrmdev_ops API filled
    in, it doesn't actually support xfrm. When the request is
    made to add the new macvlan device, the XFRM listener for
    NETDEV_REGISTER calls xfrm_api_check() which fails the new
    registration because dev->xfrmdev_ops is NULL.

    The macvlan creation succeeds when we filter out the ESP
    feature flags in macvlan_fix_features(), so let's filter them
    out like we're already filtering out ~NETIF_F_NETNS_LOCAL.
    When XFRM support is added in the future, we can add the flags
    into MACVLAN_FEATURES.

    This same problem could crop up in the future with any other
    new feature flags, so let's filter out any flags that aren't
    defined as supported in macvlan.

    Fixes: d77e38e612a0 ("xfrm: Add an IPsec hardware offloading API")
    Reported-by: Alexey Kodanev <alexey.kodanev@oracle.com>
    Signed-off-by: Shannon Nelson <shannon.nelson@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/macvlan.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/net/macvlan.c
    +++ b/drivers/net/macvlan.c
    @@ -1036,7 +1036,7 @@ static netdev_features_t macvlan_fix_fea
    lowerdev_features &= (features | ~NETIF_F_LRO);
    features = netdev_increment_features(lowerdev_features, features, mask);
    features |= ALWAYS_ON_FEATURES;
    - features &= ~NETIF_F_NETNS_LOCAL;
    + features &= (ALWAYS_ON_FEATURES | MACVLAN_FEATURES);

    return features;
    }

    \
     
     \ /
      Last update: 2018-03-29 20:35    [W:4.141 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site