lkml.org 
[lkml]   [2020]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 133/205] nfsd: Fix cld_net->cn_tfm initialization
    Date
    From: Scott Mayhew <smayhew@redhat.com>

    [ Upstream commit 18b9a895e652979b70f9c20565394a69354dfebc ]

    Don't assign an error pointer to cld_net->cn_tfm, otherwise an oops will
    occur in nfsd4_remove_cld_pipe().

    Also, move the initialization of cld_net->cn_tfm so that it occurs after
    the check to see if nfsdcld is running. This is necessary because
    nfsd4_client_tracking_init() looks for -ETIMEDOUT to determine whether
    to use the "old" nfsdcld tracking ops.

    Fixes: 6ee95d1c8991 ("nfsd: add support for upcall version 2")
    Reported-by: Jamie Heilman <jamie@audible.transient.net>
    Signed-off-by: Scott Mayhew <smayhew@redhat.com>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfsd/nfs4recover.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c
    index cdc75ad4438b..c35c0ebaf722 100644
    --- a/fs/nfsd/nfs4recover.c
    +++ b/fs/nfsd/nfs4recover.c
    @@ -1578,6 +1578,7 @@ nfsd4_cld_tracking_init(struct net *net)
    struct nfsd_net *nn = net_generic(net, nfsd_net_id);
    bool running;
    int retries = 10;
    + struct crypto_shash *tfm;

    status = nfs4_cld_state_init(net);
    if (status)
    @@ -1586,11 +1587,6 @@ nfsd4_cld_tracking_init(struct net *net)
    status = __nfsd4_init_cld_pipe(net);
    if (status)
    goto err_shutdown;
    - nn->cld_net->cn_tfm = crypto_alloc_shash("sha256", 0, 0);
    - if (IS_ERR(nn->cld_net->cn_tfm)) {
    - status = PTR_ERR(nn->cld_net->cn_tfm);
    - goto err_remove;
    - }

    /*
    * rpc pipe upcalls take 30 seconds to time out, so we don't want to
    @@ -1607,6 +1603,12 @@ nfsd4_cld_tracking_init(struct net *net)
    status = -ETIMEDOUT;
    goto err_remove;
    }
    + tfm = crypto_alloc_shash("sha256", 0, 0);
    + if (IS_ERR(tfm)) {
    + status = PTR_ERR(tfm);
    + goto err_remove;
    + }
    + nn->cld_net->cn_tfm = tfm;

    status = nfsd4_cld_get_version(nn);
    if (status == -EOPNOTSUPP)
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-01-16 20:23    [W:5.021 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site