lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 378/593] xfrm: Fix xfrm offload fallback fail case
    Date
    From: Ayush Sawal <ayush.sawal@chelsio.com>

    [ Upstream commit dd72fadf2186fc8a6018f97fe72f4d5ca05df440 ]

    In case of xfrm offload, if xdo_dev_state_add() of driver returns
    -EOPNOTSUPP, xfrm offload fallback is failed.
    In xfrm state_add() both xso->dev and xso->real_dev are initialized to
    dev and when err(-EOPNOTSUPP) is returned only xso->dev is set to null.

    So in this scenario the condition in func validate_xmit_xfrm(),
    if ((x->xso.dev != dev) && (x->xso.real_dev == dev))
    return skb;
    returns true, due to which skb is returned without calling esp_xmit()
    below which has fallback code. Hence the CRYPTO_FALLBACK is failing.

    So fixing this with by keeping x->xso.real_dev as NULL when err is
    returned in func xfrm_dev_state_add().

    Fixes: bdfd2d1fa79a ("bonding/xfrm: use real_dev instead of slave_dev")
    Signed-off-by: Ayush Sawal <ayush.sawal@chelsio.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/xfrm/xfrm_device.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c
    index 6d6917b68856..e843b0d9e2a6 100644
    --- a/net/xfrm/xfrm_device.c
    +++ b/net/xfrm/xfrm_device.c
    @@ -268,6 +268,7 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,
    xso->num_exthdrs = 0;
    xso->flags = 0;
    xso->dev = NULL;
    + xso->real_dev = NULL;
    dev_put(dev);

    if (err != -EOPNOTSUPP)
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 09:09    [W:2.857 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site