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

Commit 479d014d authored by Herbert Xu's avatar Herbert Xu
Browse files
Merge the crypto tree to pull in chelsio chcr fix.
parents 585b5fa6 57891633
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ obj-$(CONFIG_CRYPTO_ECDH) += ecdh_generic.o

$(obj)/rsapubkey-asn1.o: $(obj)/rsapubkey-asn1.c $(obj)/rsapubkey-asn1.h
$(obj)/rsaprivkey-asn1.o: $(obj)/rsaprivkey-asn1.c $(obj)/rsaprivkey-asn1.h
$(obj)/rsa_helper.o: $(obj)/rsapubkey-asn1.h $(obj)/rsaprivkey-asn1.h
clean-files += rsapubkey-asn1.c rsapubkey-asn1.h
clean-files += rsaprivkey-asn1.c rsaprivkey-asn1.h

+10 −7
Original line number Diff line number Diff line
@@ -214,23 +214,26 @@ static int hash_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,

	ahash_request_set_crypt(&ctx->req, NULL, ctx->result, 0);

	if (ctx->more) {
	if (!result && !ctx->more) {
		err = af_alg_wait_for_completion(
				crypto_ahash_init(&ctx->req),
				&ctx->completion);
		if (err)
			goto unlock;
	}

	if (!result || ctx->more) {
		ctx->more = 0;
		err = af_alg_wait_for_completion(crypto_ahash_final(&ctx->req),
						 &ctx->completion);
		if (err)
			goto unlock;
	} else if (!result) {
		err = af_alg_wait_for_completion(
				crypto_ahash_digest(&ctx->req),
				&ctx->completion);
	}

	err = memcpy_to_msg(msg, ctx->result, len);

	hash_free_result(sk, ctx);

unlock:
	hash_free_result(sk, ctx);
	release_sock(sk);

	return err ?: len;
+24 −5
Original line number Diff line number Diff line
@@ -262,6 +262,7 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
			      u8 *inbuf, u32 inbuflen,
			      u8 *outbuf, u32 outlen);
#define DRBG_CTR_NULL_LEN 128
#define DRBG_OUTSCRATCHLEN DRBG_CTR_NULL_LEN

/* BCC function for CTR DRBG as defined in 10.4.3 */
static int drbg_ctr_bcc(struct drbg_state *drbg,
@@ -1644,6 +1645,9 @@ static int drbg_fini_sym_kernel(struct drbg_state *drbg)
	kfree(drbg->ctr_null_value_buf);
	drbg->ctr_null_value = NULL;

	kfree(drbg->outscratchpadbuf);
	drbg->outscratchpadbuf = NULL;

	return 0;
}

@@ -1708,6 +1712,15 @@ static int drbg_init_sym_kernel(struct drbg_state *drbg)
	drbg->ctr_null_value = (u8 *)PTR_ALIGN(drbg->ctr_null_value_buf,
					       alignmask + 1);

	drbg->outscratchpadbuf = kmalloc(DRBG_OUTSCRATCHLEN + alignmask,
					 GFP_KERNEL);
	if (!drbg->outscratchpadbuf) {
		drbg_fini_sym_kernel(drbg);
		return -ENOMEM;
	}
	drbg->outscratchpad = (u8 *)PTR_ALIGN(drbg->outscratchpadbuf,
					      alignmask + 1);

	return alignmask;
}

@@ -1737,15 +1750,16 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
			      u8 *outbuf, u32 outlen)
{
	struct scatterlist sg_in;
	int ret;

	sg_init_one(&sg_in, inbuf, inlen);

	while (outlen) {
		u32 cryptlen = min_t(u32, inlen, outlen);
		u32 cryptlen = min3(inlen, outlen, (u32)DRBG_OUTSCRATCHLEN);
		struct scatterlist sg_out;
		int ret;

		sg_init_one(&sg_out, outbuf, cryptlen);
		/* Output buffer may not be valid for SGL, use scratchpad */
		sg_init_one(&sg_out, drbg->outscratchpad, cryptlen);
		skcipher_request_set_crypt(drbg->ctr_req, &sg_in, &sg_out,
					   cryptlen, drbg->V);
		ret = crypto_skcipher_encrypt(drbg->ctr_req);
@@ -1761,15 +1775,20 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
				break;
			}
		default:
			return ret;
			goto out;
		}
		init_completion(&drbg->ctr_completion);

		memcpy(outbuf, drbg->outscratchpad, cryptlen);

		outlen -= cryptlen;
		outbuf += cryptlen;
	}
	ret = 0;

	return 0;
out:
	memzero_explicit(drbg->outscratchpad, DRBG_OUTSCRATCHLEN);
	return ret;
}
#endif /* CONFIG_CRYPTO_DRBG_CTR */

+0 −4
Original line number Diff line number Diff line
@@ -68,10 +68,6 @@ void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg,

	sg = scatterwalk_ffwd(tmp, sg, start);

	if (sg_page(sg) == virt_to_page(buf) &&
	    sg->offset == offset_in_page(buf))
		return;

	scatterwalk_start(&walk, sg);
	scatterwalk_copychunks(buf, &walk, nbytes, out);
	scatterwalk_done(&walk, out, 0);
+9 −0
Original line number Diff line number Diff line
@@ -3568,6 +3568,15 @@ static int __init caam_algapi_init(void)
		if (!aes_inst && (alg_sel == OP_ALG_ALGSEL_AES))
				continue;

		/*
		 * Check support for AES modes not available
		 * on LP devices.
		 */
		if ((cha_vid & CHA_ID_LS_AES_MASK) == CHA_ID_LS_AES_LP)
			if ((alg->class1_alg_type & OP_ALG_AAI_MASK) ==
			     OP_ALG_AAI_XTS)
				continue;

		t_alg = caam_alg_alloc(alg);
		if (IS_ERR(t_alg)) {
			err = PTR_ERR(t_alg);
Loading