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

Commit abeb4f57 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull crypto fixes from Herbert Xu:
 "This fixes the following issues:

   - a bogus BUG_ON in ixp4xx that can be triggered by a dst buffer that
     is an SG list.

   - the error handling in hwrngd may cause a crash in case of an error.

   - fix a race condition in qat registration when multiple devices are
     present"

* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
  hwrng: core - correct error check of kthread_run call
  crypto: ixp4xx - Remove bogus BUG_ON on scattered dst buffer
  crypto: qat - Fix invalid synchronization between register/unregister sym algs
parents 5b2a0eee 17fb874d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -429,7 +429,7 @@ static int hwrng_fillfn(void *unused)
static void start_khwrngd(void)
{
	hwrng_fill = kthread_run(hwrng_fillfn, NULL, "hwrng");
	if (hwrng_fill == ERR_PTR(-ENOMEM)) {
	if (IS_ERR(hwrng_fill)) {
		pr_err("hwrng_fill thread creation failed");
		hwrng_fill = NULL;
	}
+0 −1
Original line number Diff line number Diff line
@@ -905,7 +905,6 @@ static int ablk_perform(struct ablkcipher_request *req, int encrypt)
		crypt->mode |= NPE_OP_NOT_IN_PLACE;
		/* This was never tested by Intel
		 * for more than one dst buffer, I think. */
		BUG_ON(req->dst->length < nbytes);
		req_ctx->dst = NULL;
		if (!chainup_buffers(dev, req->dst, nbytes, &dst_hook,
					flags, DMA_FROM_DEVICE))
+16 −8
Original line number Diff line number Diff line
@@ -73,7 +73,8 @@
				       ICP_QAT_HW_CIPHER_KEY_CONVERT, \
				       ICP_QAT_HW_CIPHER_DECRYPT)

static atomic_t active_dev;
static DEFINE_MUTEX(algs_lock);
static unsigned int active_devs;

struct qat_alg_buf {
	uint32_t len;
@@ -1280,7 +1281,10 @@ static struct crypto_alg qat_algs[] = { {

int qat_algs_register(void)
{
	if (atomic_add_return(1, &active_dev) == 1) {
	int ret = 0;

	mutex_lock(&algs_lock);
	if (++active_devs == 1) {
		int i;

		for (i = 0; i < ARRAY_SIZE(qat_algs); i++)
@@ -1289,21 +1293,25 @@ int qat_algs_register(void)
				CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_ASYNC :
				CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC;

		return crypto_register_algs(qat_algs, ARRAY_SIZE(qat_algs));
		ret = crypto_register_algs(qat_algs, ARRAY_SIZE(qat_algs));
	}
	return 0;
	mutex_unlock(&algs_lock);
	return ret;
}

int qat_algs_unregister(void)
{
	if (atomic_sub_return(1, &active_dev) == 0)
		return crypto_unregister_algs(qat_algs, ARRAY_SIZE(qat_algs));
	return 0;
	int ret = 0;

	mutex_lock(&algs_lock);
	if (--active_devs == 0)
		ret = crypto_unregister_algs(qat_algs, ARRAY_SIZE(qat_algs));
	mutex_unlock(&algs_lock);
	return ret;
}

int qat_algs_init(void)
{
	atomic_set(&active_dev, 0);
	crypto_get_default_rng();
	return 0;
}