Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1edb82d2 authored by Herbert Xu's avatar Herbert Xu
Browse files

nfsd: Use shash



This patch replaces uses of the long obsolete hash interface with
shash.

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 69110e3c
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -32,10 +32,10 @@
*
*/

#include <crypto/hash.h>
#include <linux/file.h>
#include <linux/slab.h>
#include <linux/namei.h>
#include <linux/crypto.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/module.h>
@@ -104,29 +104,35 @@ static int
nfs4_make_rec_clidname(char *dname, const struct xdr_netobj *clname)
{
	struct xdr_netobj cksum;
	struct hash_desc desc;
	struct scatterlist sg;
	struct crypto_shash *tfm;
	int status;

	dprintk("NFSD: nfs4_make_rec_clidname for %.*s\n",
			clname->len, clname->data);
	desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
	desc.tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC);
	if (IS_ERR(desc.tfm)) {
		status = PTR_ERR(desc.tfm);
	tfm = crypto_alloc_shash("md5", 0, 0);
	if (IS_ERR(tfm)) {
		status = PTR_ERR(tfm);
		goto out_no_tfm;
	}

	cksum.len = crypto_hash_digestsize(desc.tfm);
	cksum.len = crypto_shash_digestsize(tfm);
	cksum.data = kmalloc(cksum.len, GFP_KERNEL);
	if (cksum.data == NULL) {
		status = -ENOMEM;
 		goto out;
	}

	sg_init_one(&sg, clname->data, clname->len);
	{
		SHASH_DESC_ON_STACK(desc, tfm);

		desc->tfm = tfm;
		desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;

		status = crypto_shash_digest(desc, clname->data, clname->len,
					     cksum.data);
		shash_desc_zero(desc);
	}

	status = crypto_hash_digest(&desc, &sg, sg.length, cksum.data);
	if (status)
		goto out;

@@ -135,7 +141,7 @@ nfs4_make_rec_clidname(char *dname, const struct xdr_netobj *clname)
	status = 0;
out:
	kfree(cksum.data);
	crypto_free_hash(desc.tfm);
	crypto_free_shash(tfm);
out_no_tfm:
	return status;
}