From e46430ef6ee045ec447a0796b419b8cdeee4f25f Mon Sep 17 00:00:00 2001 From: Scott Mayhew Date: Tue, 12 Nov 2019 10:10:00 -0500 Subject: [PATCH] nfsd: Fix cld_net->cn_tfm initialization Don't assign an error pointer to cn->cn_tfm, otherwise an oops will occur in nfsd4_remove_cld_pipe(). Fixes: 6ee95d1c8991 ("nfsd: add support for upcall version 2") Reported-by: Jamie Heilman Signed-off-by: Scott Mayhew --- fs/nfsd/nfs4recover.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index cdc75ad4438b..af07d0f55fe3 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,13 @@ nfsd4_cld_tracking_init(struct net *net) status = __nfsd4_init_cld_pipe(net); if (status) goto err_shutdown; + tfm = crypto_alloc_shash("sha256", 0, 0); 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); + if (IS_ERR(tfm)) { + status = PTR_ERR(tfm); goto err_remove; } + nn->cld_net->cn_tfm = tfm; /* * rpc pipe upcalls take 30 seconds to time out, so we don't want to -- 2.17.2