mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	mm, treewide: rename kzfree() to kfree_sensitive()
As said by Linus: A symmetric naming is only helpful if it implies symmetries in use. Otherwise it's actively misleading. In "kzalloc()", the z is meaningful and an important part of what the caller wants. In "kzfree()", the z is actively detrimental, because maybe in the future we really _might_ want to use that "memfill(0xdeadbeef)" or something. The "zero" part of the interface isn't even _relevant_. The main reason that kzfree() exists is to clear sensitive information that should not be leaked to other future users of the same memory objects. Rename kzfree() to kfree_sensitive() to follow the example of the recently added kvfree_sensitive() and make the intention of the API more explicit. In addition, memzero_explicit() is used to clear the memory to make sure that it won't get optimized away by the compiler. The renaming is done by using the command sequence: git grep -w --name-only kzfree |\ xargs sed -i 's/kzfree/kfree_sensitive/' followed by some editing of the kfree_sensitive() kerneldoc and adding a kzfree backward compatibility macro in slab.h. [akpm@linux-foundation.org: fs/crypto/inline_crypt.c needs linux/slab.h] [akpm@linux-foundation.org: fix fs/crypto/inline_crypt.c some more] Suggested-by: Joe Perches <joe@perches.com> Signed-off-by: Waiman Long <longman@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: David Howells <dhowells@redhat.com> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> Cc: James Morris <jmorris@namei.org> Cc: "Serge E. Hallyn" <serge@hallyn.com> Cc: Joe Perches <joe@perches.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: David Rientjes <rientjes@google.com> Cc: Dan Carpenter <dan.carpenter@oracle.com> Cc: "Jason A . Donenfeld" <Jason@zx2c4.com> Link: http://lkml.kernel.org/r/20200616154311.12314-3-longman@redhat.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									57c720d414
								
							
						
					
					
						commit
						453431a549
					
				
					 114 changed files with 323 additions and 320 deletions
				
			
		| 
						 | 
					@ -249,7 +249,7 @@ static void prng_tdes_deinstantiate(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	pr_debug("The prng module stopped "
 | 
						pr_debug("The prng module stopped "
 | 
				
			||||||
		 "after running in triple DES mode\n");
 | 
							 "after running in triple DES mode\n");
 | 
				
			||||||
	kzfree(prng_data);
 | 
						kfree_sensitive(prng_data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -442,7 +442,7 @@ static int __init prng_sha512_instantiate(void)
 | 
				
			||||||
static void prng_sha512_deinstantiate(void)
 | 
					static void prng_sha512_deinstantiate(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	pr_debug("The prng module stopped after running in SHA-512 mode\n");
 | 
						pr_debug("The prng module stopped after running in SHA-512 mode\n");
 | 
				
			||||||
	kzfree(prng_data);
 | 
						kfree_sensitive(prng_data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ static int get_e820_md5(struct e820_table *table, void *buf)
 | 
				
			||||||
	if (crypto_shash_digest(desc, (u8 *)table, size, buf))
 | 
						if (crypto_shash_digest(desc, (u8 *)table, size, buf))
 | 
				
			||||||
		ret = -EINVAL;
 | 
							ret = -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(desc);
 | 
						kfree_sensitive(desc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
free_tfm:
 | 
					free_tfm:
 | 
				
			||||||
	crypto_free_shash(tfm);
 | 
						crypto_free_shash(tfm);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -177,7 +177,7 @@ static int adiantum_setkey(struct crypto_skcipher *tfm, const u8 *key,
 | 
				
			||||||
	keyp += NHPOLY1305_KEY_SIZE;
 | 
						keyp += NHPOLY1305_KEY_SIZE;
 | 
				
			||||||
	WARN_ON(keyp != &data->derived_keys[ARRAY_SIZE(data->derived_keys)]);
 | 
						WARN_ON(keyp != &data->derived_keys[ARRAY_SIZE(data->derived_keys)]);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kzfree(data);
 | 
						kfree_sensitive(data);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -183,7 +183,7 @@ static int ahash_setkey_unaligned(struct crypto_ahash *tfm, const u8 *key,
 | 
				
			||||||
	alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
 | 
						alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
 | 
				
			||||||
	memcpy(alignbuffer, key, keylen);
 | 
						memcpy(alignbuffer, key, keylen);
 | 
				
			||||||
	ret = tfm->setkey(tfm, alignbuffer, keylen);
 | 
						ret = tfm->setkey(tfm, alignbuffer, keylen);
 | 
				
			||||||
	kzfree(buffer);
 | 
						kfree_sensitive(buffer);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -302,7 +302,7 @@ static void ahash_restore_req(struct ahash_request *req, int err)
 | 
				
			||||||
	req->priv = NULL;
 | 
						req->priv = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Free the req->priv.priv from the ADJUSTED request. */
 | 
						/* Free the req->priv.priv from the ADJUSTED request. */
 | 
				
			||||||
	kzfree(priv);
 | 
						kfree_sensitive(priv);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ahash_notify_einprogress(struct ahash_request *req)
 | 
					static void ahash_notify_einprogress(struct ahash_request *req)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -571,7 +571,7 @@ void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm)
 | 
				
			||||||
		alg->cra_exit(tfm);
 | 
							alg->cra_exit(tfm);
 | 
				
			||||||
	crypto_exit_ops(tfm);
 | 
						crypto_exit_ops(tfm);
 | 
				
			||||||
	crypto_mod_put(alg);
 | 
						crypto_mod_put(alg);
 | 
				
			||||||
	kzfree(mem);
 | 
						kfree_sensitive(mem);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(crypto_destroy_tfm);
 | 
					EXPORT_SYMBOL_GPL(crypto_destroy_tfm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -376,7 +376,7 @@ static int pefile_digest_pe(const void *pebuf, unsigned int pelen,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
	kzfree(desc);
 | 
						kfree_sensitive(desc);
 | 
				
			||||||
error_no_desc:
 | 
					error_no_desc:
 | 
				
			||||||
	crypto_free_shash(tfm);
 | 
						crypto_free_shash(tfm);
 | 
				
			||||||
	kleave(" = %d", ret);
 | 
						kleave(" = %d", ret);
 | 
				
			||||||
| 
						 | 
					@ -447,6 +447,6 @@ int verify_pefile_signature(const void *pebuf, unsigned pelen,
 | 
				
			||||||
	ret = pefile_digest_pe(pebuf, pelen, &ctx);
 | 
						ret = pefile_digest_pe(pebuf, pelen, &ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
	kzfree(ctx.digest);
 | 
						kfree_sensitive(ctx.digest);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -163,7 +163,7 @@ static void __deflate_exit(void *ctx)
 | 
				
			||||||
static void deflate_free_ctx(struct crypto_scomp *tfm, void *ctx)
 | 
					static void deflate_free_ctx(struct crypto_scomp *tfm, void *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__deflate_exit(ctx);
 | 
						__deflate_exit(ctx);
 | 
				
			||||||
	kzfree(ctx);
 | 
						kfree_sensitive(ctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void deflate_exit(struct crypto_tfm *tfm)
 | 
					static void deflate_exit(struct crypto_tfm *tfm)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1218,19 +1218,19 @@ static inline void drbg_dealloc_state(struct drbg_state *drbg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!drbg)
 | 
						if (!drbg)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	kzfree(drbg->Vbuf);
 | 
						kfree_sensitive(drbg->Vbuf);
 | 
				
			||||||
	drbg->Vbuf = NULL;
 | 
						drbg->Vbuf = NULL;
 | 
				
			||||||
	drbg->V = NULL;
 | 
						drbg->V = NULL;
 | 
				
			||||||
	kzfree(drbg->Cbuf);
 | 
						kfree_sensitive(drbg->Cbuf);
 | 
				
			||||||
	drbg->Cbuf = NULL;
 | 
						drbg->Cbuf = NULL;
 | 
				
			||||||
	drbg->C = NULL;
 | 
						drbg->C = NULL;
 | 
				
			||||||
	kzfree(drbg->scratchpadbuf);
 | 
						kfree_sensitive(drbg->scratchpadbuf);
 | 
				
			||||||
	drbg->scratchpadbuf = NULL;
 | 
						drbg->scratchpadbuf = NULL;
 | 
				
			||||||
	drbg->reseed_ctr = 0;
 | 
						drbg->reseed_ctr = 0;
 | 
				
			||||||
	drbg->d_ops = NULL;
 | 
						drbg->d_ops = NULL;
 | 
				
			||||||
	drbg->core = NULL;
 | 
						drbg->core = NULL;
 | 
				
			||||||
	if (IS_ENABLED(CONFIG_CRYPTO_FIPS)) {
 | 
						if (IS_ENABLED(CONFIG_CRYPTO_FIPS)) {
 | 
				
			||||||
		kzfree(drbg->prev);
 | 
							kfree_sensitive(drbg->prev);
 | 
				
			||||||
		drbg->prev = NULL;
 | 
							drbg->prev = NULL;
 | 
				
			||||||
		drbg->fips_primed = false;
 | 
							drbg->fips_primed = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1701,7 +1701,7 @@ static int drbg_fini_hash_kernel(struct drbg_state *drbg)
 | 
				
			||||||
	struct sdesc *sdesc = (struct sdesc *)drbg->priv_data;
 | 
						struct sdesc *sdesc = (struct sdesc *)drbg->priv_data;
 | 
				
			||||||
	if (sdesc) {
 | 
						if (sdesc) {
 | 
				
			||||||
		crypto_free_shash(sdesc->shash.tfm);
 | 
							crypto_free_shash(sdesc->shash.tfm);
 | 
				
			||||||
		kzfree(sdesc);
 | 
							kfree_sensitive(sdesc);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	drbg->priv_data = NULL;
 | 
						drbg->priv_data = NULL;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ static u64 *ecc_alloc_digits_space(unsigned int ndigits)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ecc_free_digits_space(u64 *space)
 | 
					static void ecc_free_digits_space(u64 *space)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(space);
 | 
						kfree_sensitive(space);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct ecc_point *ecc_alloc_point(unsigned int ndigits)
 | 
					static struct ecc_point *ecc_alloc_point(unsigned int ndigits)
 | 
				
			||||||
| 
						 | 
					@ -101,9 +101,9 @@ static void ecc_free_point(struct ecc_point *p)
 | 
				
			||||||
	if (!p)
 | 
						if (!p)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(p->x);
 | 
						kfree_sensitive(p->x);
 | 
				
			||||||
	kzfree(p->y);
 | 
						kfree_sensitive(p->y);
 | 
				
			||||||
	kzfree(p);
 | 
						kfree_sensitive(p);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void vli_clear(u64 *vli, unsigned int ndigits)
 | 
					static void vli_clear(u64 *vli, unsigned int ndigits)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -124,7 +124,7 @@ static int ecdh_compute_value(struct kpp_request *req)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* fall through */
 | 
						/* fall through */
 | 
				
			||||||
free_all:
 | 
					free_all:
 | 
				
			||||||
	kzfree(shared_secret);
 | 
						kfree_sensitive(shared_secret);
 | 
				
			||||||
free_pubkey:
 | 
					free_pubkey:
 | 
				
			||||||
	kfree(public_key);
 | 
						kfree(public_key);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -139,7 +139,7 @@ static int crypto_gcm_setkey(struct crypto_aead *aead, const u8 *key,
 | 
				
			||||||
			       CRYPTO_TFM_REQ_MASK);
 | 
								       CRYPTO_TFM_REQ_MASK);
 | 
				
			||||||
	err = crypto_ahash_setkey(ghash, (u8 *)&data->hash, sizeof(be128));
 | 
						err = crypto_ahash_setkey(ghash, (u8 *)&data->hash, sizeof(be128));
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kzfree(data);
 | 
						kfree_sensitive(data);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -304,8 +304,8 @@ void gf128mul_free_64k(struct gf128mul_64k *t)
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 16; i++)
 | 
						for (i = 0; i < 16; i++)
 | 
				
			||||||
		kzfree(t->t[i]);
 | 
							kfree_sensitive(t->t[i]);
 | 
				
			||||||
	kzfree(t);
 | 
						kfree_sensitive(t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(gf128mul_free_64k);
 | 
					EXPORT_SYMBOL(gf128mul_free_64k);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ void *jent_zalloc(unsigned int len)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void jent_zfree(void *ptr)
 | 
					void jent_zfree(void *ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(ptr);
 | 
						kfree_sensitive(ptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int jent_fips_enabled(void)
 | 
					int jent_fips_enabled(void)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,7 @@ int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen)
 | 
				
			||||||
	err = crypto_rng_alg(tfm)->seed(tfm, seed, slen);
 | 
						err = crypto_rng_alg(tfm)->seed(tfm, seed, slen);
 | 
				
			||||||
	crypto_stats_rng_seed(alg, err);
 | 
						crypto_stats_rng_seed(alg, err);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kzfree(buf);
 | 
						kfree_sensitive(buf);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(crypto_rng_reset);
 | 
					EXPORT_SYMBOL_GPL(crypto_rng_reset);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -199,7 +199,7 @@ static int pkcs1pad_encrypt_sign_complete(struct akcipher_request *req, int err)
 | 
				
			||||||
	sg_copy_from_buffer(req->dst,
 | 
						sg_copy_from_buffer(req->dst,
 | 
				
			||||||
			    sg_nents_for_len(req->dst, ctx->key_size),
 | 
								    sg_nents_for_len(req->dst, ctx->key_size),
 | 
				
			||||||
			    out_buf, ctx->key_size);
 | 
								    out_buf, ctx->key_size);
 | 
				
			||||||
	kzfree(out_buf);
 | 
						kfree_sensitive(out_buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	req->dst_len = ctx->key_size;
 | 
						req->dst_len = ctx->key_size;
 | 
				
			||||||
| 
						 | 
					@ -322,7 +322,7 @@ static int pkcs1pad_decrypt_complete(struct akcipher_request *req, int err)
 | 
				
			||||||
				out_buf + pos, req->dst_len);
 | 
									out_buf + pos, req->dst_len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
done:
 | 
					done:
 | 
				
			||||||
	kzfree(req_ctx->out_buf);
 | 
						kfree_sensitive(req_ctx->out_buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -500,7 +500,7 @@ static int pkcs1pad_verify_complete(struct akcipher_request *req, int err)
 | 
				
			||||||
		   req->dst_len) != 0)
 | 
							   req->dst_len) != 0)
 | 
				
			||||||
		err = -EKEYREJECTED;
 | 
							err = -EKEYREJECTED;
 | 
				
			||||||
done:
 | 
					done:
 | 
				
			||||||
	kzfree(req_ctx->out_buf);
 | 
						kfree_sensitive(req_ctx->out_buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,7 @@ static void seqiv_aead_encrypt_complete2(struct aead_request *req, int err)
 | 
				
			||||||
	memcpy(req->iv, subreq->iv, crypto_aead_ivsize(geniv));
 | 
						memcpy(req->iv, subreq->iv, crypto_aead_ivsize(geniv));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kzfree(subreq->iv);
 | 
						kfree_sensitive(subreq->iv);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void seqiv_aead_encrypt_complete(struct crypto_async_request *base,
 | 
					static void seqiv_aead_encrypt_complete(struct crypto_async_request *base,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,7 +44,7 @@ static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
 | 
				
			||||||
	alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
 | 
						alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
 | 
				
			||||||
	memcpy(alignbuffer, key, keylen);
 | 
						memcpy(alignbuffer, key, keylen);
 | 
				
			||||||
	err = shash->setkey(tfm, alignbuffer, keylen);
 | 
						err = shash->setkey(tfm, alignbuffer, keylen);
 | 
				
			||||||
	kzfree(buffer);
 | 
						kfree_sensitive(buffer);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -592,7 +592,7 @@ static int skcipher_setkey_unaligned(struct crypto_skcipher *tfm,
 | 
				
			||||||
	alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
 | 
						alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
 | 
				
			||||||
	memcpy(alignbuffer, key, keylen);
 | 
						memcpy(alignbuffer, key, keylen);
 | 
				
			||||||
	ret = cipher->setkey(tfm, alignbuffer, keylen);
 | 
						ret = cipher->setkey(tfm, alignbuffer, keylen);
 | 
				
			||||||
	kzfree(buffer);
 | 
						kfree_sensitive(buffer);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1744,7 +1744,7 @@ static int test_hash_vs_generic_impl(const char *driver,
 | 
				
			||||||
	kfree(vec.plaintext);
 | 
						kfree(vec.plaintext);
 | 
				
			||||||
	kfree(vec.digest);
 | 
						kfree(vec.digest);
 | 
				
			||||||
	crypto_free_shash(generic_tfm);
 | 
						crypto_free_shash(generic_tfm);
 | 
				
			||||||
	kzfree(generic_desc);
 | 
						kfree_sensitive(generic_desc);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else /* !CONFIG_CRYPTO_MANAGER_EXTRA_TESTS */
 | 
					#else /* !CONFIG_CRYPTO_MANAGER_EXTRA_TESTS */
 | 
				
			||||||
| 
						 | 
					@ -3665,7 +3665,7 @@ static int drbg_cavs_test(const struct drbg_testvec *test, int pr,
 | 
				
			||||||
	if (IS_ERR(drng)) {
 | 
						if (IS_ERR(drng)) {
 | 
				
			||||||
		printk(KERN_ERR "alg: drbg: could not allocate DRNG handle for "
 | 
							printk(KERN_ERR "alg: drbg: could not allocate DRNG handle for "
 | 
				
			||||||
		       "%s\n", driver);
 | 
							       "%s\n", driver);
 | 
				
			||||||
		kzfree(buf);
 | 
							kfree_sensitive(buf);
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3712,7 +3712,7 @@ static int drbg_cavs_test(const struct drbg_testvec *test, int pr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
outbuf:
 | 
					outbuf:
 | 
				
			||||||
	crypto_free_rng(drng);
 | 
						crypto_free_rng(drng);
 | 
				
			||||||
	kzfree(buf);
 | 
						kfree_sensitive(buf);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -137,7 +137,7 @@ static void __zstd_exit(void *ctx)
 | 
				
			||||||
static void zstd_free_ctx(struct crypto_scomp *tfm, void *ctx)
 | 
					static void zstd_free_ctx(struct crypto_scomp *tfm, void *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__zstd_exit(ctx);
 | 
						__zstd_exit(ctx);
 | 
				
			||||||
	kzfree(ctx);
 | 
						kfree_sensitive(ctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void zstd_exit(struct crypto_tfm *tfm)
 | 
					static void zstd_exit(struct crypto_tfm *tfm)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -254,7 +254,7 @@ static int sun8i_ce_cipher(struct skcipher_request *areq)
 | 
				
			||||||
		offset = areq->cryptlen - ivsize;
 | 
							offset = areq->cryptlen - ivsize;
 | 
				
			||||||
		if (rctx->op_dir & CE_DECRYPTION) {
 | 
							if (rctx->op_dir & CE_DECRYPTION) {
 | 
				
			||||||
			memcpy(areq->iv, backup_iv, ivsize);
 | 
								memcpy(areq->iv, backup_iv, ivsize);
 | 
				
			||||||
			kzfree(backup_iv);
 | 
								kfree_sensitive(backup_iv);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			scatterwalk_map_and_copy(areq->iv, areq->dst, offset,
 | 
								scatterwalk_map_and_copy(areq->iv, areq->dst, offset,
 | 
				
			||||||
						 ivsize, 0);
 | 
											 ivsize, 0);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -249,7 +249,7 @@ static int sun8i_ss_cipher(struct skcipher_request *areq)
 | 
				
			||||||
			if (rctx->op_dir & SS_DECRYPTION) {
 | 
								if (rctx->op_dir & SS_DECRYPTION) {
 | 
				
			||||||
				memcpy(areq->iv, backup_iv, ivsize);
 | 
									memcpy(areq->iv, backup_iv, ivsize);
 | 
				
			||||||
				memzero_explicit(backup_iv, ivsize);
 | 
									memzero_explicit(backup_iv, ivsize);
 | 
				
			||||||
				kzfree(backup_iv);
 | 
									kfree_sensitive(backup_iv);
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				scatterwalk_map_and_copy(areq->iv, areq->dst, offset,
 | 
									scatterwalk_map_and_copy(areq->iv, areq->dst, offset,
 | 
				
			||||||
							 ivsize, 0);
 | 
												 ivsize, 0);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -252,8 +252,8 @@ static int meson_cipher(struct skcipher_request *areq)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
theend:
 | 
					theend:
 | 
				
			||||||
	kzfree(bkeyiv);
 | 
						kfree_sensitive(bkeyiv);
 | 
				
			||||||
	kzfree(backup_iv);
 | 
						kfree_sensitive(backup_iv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ static void atmel_ecdh_done(struct atmel_i2c_work_data *work_data, void *areq,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* fall through */
 | 
						/* fall through */
 | 
				
			||||||
free_work_data:
 | 
					free_work_data:
 | 
				
			||||||
	kzfree(work_data);
 | 
						kfree_sensitive(work_data);
 | 
				
			||||||
	kpp_request_complete(req, status);
 | 
						kpp_request_complete(req, status);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -854,14 +854,14 @@ static int caam_rsa_dec(struct akcipher_request *req)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void caam_rsa_free_key(struct caam_rsa_key *key)
 | 
					static void caam_rsa_free_key(struct caam_rsa_key *key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(key->d);
 | 
						kfree_sensitive(key->d);
 | 
				
			||||||
	kzfree(key->p);
 | 
						kfree_sensitive(key->p);
 | 
				
			||||||
	kzfree(key->q);
 | 
						kfree_sensitive(key->q);
 | 
				
			||||||
	kzfree(key->dp);
 | 
						kfree_sensitive(key->dp);
 | 
				
			||||||
	kzfree(key->dq);
 | 
						kfree_sensitive(key->dq);
 | 
				
			||||||
	kzfree(key->qinv);
 | 
						kfree_sensitive(key->qinv);
 | 
				
			||||||
	kzfree(key->tmp1);
 | 
						kfree_sensitive(key->tmp1);
 | 
				
			||||||
	kzfree(key->tmp2);
 | 
						kfree_sensitive(key->tmp2);
 | 
				
			||||||
	kfree(key->e);
 | 
						kfree(key->e);
 | 
				
			||||||
	kfree(key->n);
 | 
						kfree(key->n);
 | 
				
			||||||
	memset(key, 0, sizeof(*key));
 | 
						memset(key, 0, sizeof(*key));
 | 
				
			||||||
| 
						 | 
					@ -1018,17 +1018,17 @@ static void caam_rsa_set_priv_key_form(struct caam_rsa_ctx *ctx,
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
free_dq:
 | 
					free_dq:
 | 
				
			||||||
	kzfree(rsa_key->dq);
 | 
						kfree_sensitive(rsa_key->dq);
 | 
				
			||||||
free_dp:
 | 
					free_dp:
 | 
				
			||||||
	kzfree(rsa_key->dp);
 | 
						kfree_sensitive(rsa_key->dp);
 | 
				
			||||||
free_tmp2:
 | 
					free_tmp2:
 | 
				
			||||||
	kzfree(rsa_key->tmp2);
 | 
						kfree_sensitive(rsa_key->tmp2);
 | 
				
			||||||
free_tmp1:
 | 
					free_tmp1:
 | 
				
			||||||
	kzfree(rsa_key->tmp1);
 | 
						kfree_sensitive(rsa_key->tmp1);
 | 
				
			||||||
free_q:
 | 
					free_q:
 | 
				
			||||||
	kzfree(rsa_key->q);
 | 
						kfree_sensitive(rsa_key->q);
 | 
				
			||||||
free_p:
 | 
					free_p:
 | 
				
			||||||
	kzfree(rsa_key->p);
 | 
						kfree_sensitive(rsa_key->p);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int caam_rsa_set_priv_key(struct crypto_akcipher *tfm, const void *key,
 | 
					static int caam_rsa_set_priv_key(struct crypto_akcipher *tfm, const void *key,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,7 +74,7 @@ static void cleanup_worker_threads(struct cpt_vf *cptvf)
 | 
				
			||||||
	for (i = 0; i < cptvf->nr_queues; i++)
 | 
						for (i = 0; i < cptvf->nr_queues; i++)
 | 
				
			||||||
		tasklet_kill(&cwqe_info->vq_wqe[i].twork);
 | 
							tasklet_kill(&cwqe_info->vq_wqe[i].twork);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(cwqe_info);
 | 
						kfree_sensitive(cwqe_info);
 | 
				
			||||||
	cptvf->wqe_info = NULL;
 | 
						cptvf->wqe_info = NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ static void free_pending_queues(struct pending_qinfo *pqinfo)
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* free single queue */
 | 
							/* free single queue */
 | 
				
			||||||
		kzfree((queue->head));
 | 
							kfree_sensitive((queue->head));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		queue->front = 0;
 | 
							queue->front = 0;
 | 
				
			||||||
		queue->rear = 0;
 | 
							queue->rear = 0;
 | 
				
			||||||
| 
						 | 
					@ -189,7 +189,7 @@ static void free_command_queues(struct cpt_vf *cptvf,
 | 
				
			||||||
			chunk->head = NULL;
 | 
								chunk->head = NULL;
 | 
				
			||||||
			chunk->dma_addr = 0;
 | 
								chunk->dma_addr = 0;
 | 
				
			||||||
			hlist_del(&chunk->nextchunk);
 | 
								hlist_del(&chunk->nextchunk);
 | 
				
			||||||
			kzfree(chunk);
 | 
								kfree_sensitive(chunk);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		queue->nchunks = 0;
 | 
							queue->nchunks = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -305,12 +305,12 @@ static void do_request_cleanup(struct cpt_vf *cptvf,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(info->scatter_components);
 | 
						kfree_sensitive(info->scatter_components);
 | 
				
			||||||
	kzfree(info->gather_components);
 | 
						kfree_sensitive(info->gather_components);
 | 
				
			||||||
	kzfree(info->out_buffer);
 | 
						kfree_sensitive(info->out_buffer);
 | 
				
			||||||
	kzfree(info->in_buffer);
 | 
						kfree_sensitive(info->in_buffer);
 | 
				
			||||||
	kzfree((void *)info->completion_addr);
 | 
						kfree_sensitive((void *)info->completion_addr);
 | 
				
			||||||
	kzfree(info);
 | 
						kfree_sensitive(info);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void do_post_process(struct cpt_vf *cptvf, struct cpt_info_buffer *info)
 | 
					static void do_post_process(struct cpt_vf *cptvf, struct cpt_info_buffer *info)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,7 +90,7 @@ static void nitrox_free_aqm_queues(struct nitrox_device *ndev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < ndev->nr_queues; i++) {
 | 
						for (i = 0; i < ndev->nr_queues; i++) {
 | 
				
			||||||
		nitrox_cmdq_cleanup(ndev->aqmq[i]);
 | 
							nitrox_cmdq_cleanup(ndev->aqmq[i]);
 | 
				
			||||||
		kzfree(ndev->aqmq[i]);
 | 
							kfree_sensitive(ndev->aqmq[i]);
 | 
				
			||||||
		ndev->aqmq[i] = NULL;
 | 
							ndev->aqmq[i] = NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -122,7 +122,7 @@ static int nitrox_alloc_aqm_queues(struct nitrox_device *ndev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = nitrox_cmdq_init(cmdq, AQM_Q_ALIGN_BYTES);
 | 
							err = nitrox_cmdq_init(cmdq, AQM_Q_ALIGN_BYTES);
 | 
				
			||||||
		if (err) {
 | 
							if (err) {
 | 
				
			||||||
			kzfree(cmdq);
 | 
								kfree_sensitive(cmdq);
 | 
				
			||||||
			goto aqmq_fail;
 | 
								goto aqmq_fail;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ndev->aqmq[i] = cmdq;
 | 
							ndev->aqmq[i] = cmdq;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -260,7 +260,7 @@ void *zip_alloc_scomp_ctx_deflate(struct crypto_scomp *tfm)
 | 
				
			||||||
	ret = zip_ctx_init(zip_ctx, 0);
 | 
						ret = zip_ctx_init(zip_ctx, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		kzfree(zip_ctx);
 | 
							kfree_sensitive(zip_ctx);
 | 
				
			||||||
		return ERR_PTR(ret);
 | 
							return ERR_PTR(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,7 +279,7 @@ void *zip_alloc_scomp_ctx_lzs(struct crypto_scomp *tfm)
 | 
				
			||||||
	ret = zip_ctx_init(zip_ctx, 1);
 | 
						ret = zip_ctx_init(zip_ctx, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		kzfree(zip_ctx);
 | 
							kfree_sensitive(zip_ctx);
 | 
				
			||||||
		return ERR_PTR(ret);
 | 
							return ERR_PTR(ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -291,7 +291,7 @@ void zip_free_scomp_ctx(struct crypto_scomp *tfm, void *ctx)
 | 
				
			||||||
	struct zip_kernel_ctx *zip_ctx = ctx;
 | 
						struct zip_kernel_ctx *zip_ctx = ctx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	zip_ctx_exit(zip_ctx);
 | 
						zip_ctx_exit(zip_ctx);
 | 
				
			||||||
	kzfree(zip_ctx);
 | 
						kfree_sensitive(zip_ctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int zip_scomp_compress(struct crypto_scomp *tfm,
 | 
					int zip_scomp_compress(struct crypto_scomp *tfm,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,13 +112,13 @@ static int ccp_check_key_length(unsigned int len)
 | 
				
			||||||
static void ccp_rsa_free_key_bufs(struct ccp_ctx *ctx)
 | 
					static void ccp_rsa_free_key_bufs(struct ccp_ctx *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Clean up old key data */
 | 
						/* Clean up old key data */
 | 
				
			||||||
	kzfree(ctx->u.rsa.e_buf);
 | 
						kfree_sensitive(ctx->u.rsa.e_buf);
 | 
				
			||||||
	ctx->u.rsa.e_buf = NULL;
 | 
						ctx->u.rsa.e_buf = NULL;
 | 
				
			||||||
	ctx->u.rsa.e_len = 0;
 | 
						ctx->u.rsa.e_len = 0;
 | 
				
			||||||
	kzfree(ctx->u.rsa.n_buf);
 | 
						kfree_sensitive(ctx->u.rsa.n_buf);
 | 
				
			||||||
	ctx->u.rsa.n_buf = NULL;
 | 
						ctx->u.rsa.n_buf = NULL;
 | 
				
			||||||
	ctx->u.rsa.n_len = 0;
 | 
						ctx->u.rsa.n_len = 0;
 | 
				
			||||||
	kzfree(ctx->u.rsa.d_buf);
 | 
						kfree_sensitive(ctx->u.rsa.d_buf);
 | 
				
			||||||
	ctx->u.rsa.d_buf = NULL;
 | 
						ctx->u.rsa.d_buf = NULL;
 | 
				
			||||||
	ctx->u.rsa.d_len = 0;
 | 
						ctx->u.rsa.d_len = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -448,7 +448,7 @@ static int cc_get_plain_hmac_key(struct crypto_aead *tfm, const u8 *authkey,
 | 
				
			||||||
		if (dma_mapping_error(dev, key_dma_addr)) {
 | 
							if (dma_mapping_error(dev, key_dma_addr)) {
 | 
				
			||||||
			dev_err(dev, "Mapping key va=0x%p len=%u for DMA failed\n",
 | 
								dev_err(dev, "Mapping key va=0x%p len=%u for DMA failed\n",
 | 
				
			||||||
				key, keylen);
 | 
									key, keylen);
 | 
				
			||||||
			kzfree(key);
 | 
								kfree_sensitive(key);
 | 
				
			||||||
			return -ENOMEM;
 | 
								return -ENOMEM;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (keylen > blocksize) {
 | 
							if (keylen > blocksize) {
 | 
				
			||||||
| 
						 | 
					@ -533,7 +533,7 @@ static int cc_get_plain_hmac_key(struct crypto_aead *tfm, const u8 *authkey,
 | 
				
			||||||
	if (key_dma_addr)
 | 
						if (key_dma_addr)
 | 
				
			||||||
		dma_unmap_single(dev, key_dma_addr, keylen, DMA_TO_DEVICE);
 | 
							dma_unmap_single(dev, key_dma_addr, keylen, DMA_TO_DEVICE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(key);
 | 
						kfree_sensitive(key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -488,7 +488,7 @@ void cc_unmap_aead_request(struct device *dev, struct aead_request *req)
 | 
				
			||||||
	if (areq_ctx->gen_ctx.iv_dma_addr) {
 | 
						if (areq_ctx->gen_ctx.iv_dma_addr) {
 | 
				
			||||||
		dma_unmap_single(dev, areq_ctx->gen_ctx.iv_dma_addr,
 | 
							dma_unmap_single(dev, areq_ctx->gen_ctx.iv_dma_addr,
 | 
				
			||||||
				 hw_iv_size, DMA_BIDIRECTIONAL);
 | 
									 hw_iv_size, DMA_BIDIRECTIONAL);
 | 
				
			||||||
		kzfree(areq_ctx->gen_ctx.iv);
 | 
							kfree_sensitive(areq_ctx->gen_ctx.iv);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Release pool */
 | 
						/* Release pool */
 | 
				
			||||||
| 
						 | 
					@ -559,7 +559,7 @@ static int cc_aead_chain_iv(struct cc_drvdata *drvdata,
 | 
				
			||||||
	if (dma_mapping_error(dev, areq_ctx->gen_ctx.iv_dma_addr)) {
 | 
						if (dma_mapping_error(dev, areq_ctx->gen_ctx.iv_dma_addr)) {
 | 
				
			||||||
		dev_err(dev, "Mapping iv %u B at va=%pK for DMA failed\n",
 | 
							dev_err(dev, "Mapping iv %u B at va=%pK for DMA failed\n",
 | 
				
			||||||
			hw_iv_size, req->iv);
 | 
								hw_iv_size, req->iv);
 | 
				
			||||||
		kzfree(areq_ctx->gen_ctx.iv);
 | 
							kfree_sensitive(areq_ctx->gen_ctx.iv);
 | 
				
			||||||
		areq_ctx->gen_ctx.iv = NULL;
 | 
							areq_ctx->gen_ctx.iv = NULL;
 | 
				
			||||||
		rc = -ENOMEM;
 | 
							rc = -ENOMEM;
 | 
				
			||||||
		goto chain_iv_exit;
 | 
							goto chain_iv_exit;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -257,7 +257,7 @@ static void cc_cipher_exit(struct crypto_tfm *tfm)
 | 
				
			||||||
		&ctx_p->user.key_dma_addr);
 | 
							&ctx_p->user.key_dma_addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Free key buffer in context */
 | 
						/* Free key buffer in context */
 | 
				
			||||||
	kzfree(ctx_p->user.key);
 | 
						kfree_sensitive(ctx_p->user.key);
 | 
				
			||||||
	dev_dbg(dev, "Free key buffer in context. key=@%p\n", ctx_p->user.key);
 | 
						dev_dbg(dev, "Free key buffer in context. key=@%p\n", ctx_p->user.key);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -881,7 +881,7 @@ static void cc_cipher_complete(struct device *dev, void *cc_req, int err)
 | 
				
			||||||
		/* Not a BACKLOG notification */
 | 
							/* Not a BACKLOG notification */
 | 
				
			||||||
		cc_unmap_cipher_request(dev, req_ctx, ivsize, src, dst);
 | 
							cc_unmap_cipher_request(dev, req_ctx, ivsize, src, dst);
 | 
				
			||||||
		memcpy(req->iv, req_ctx->iv, ivsize);
 | 
							memcpy(req->iv, req_ctx->iv, ivsize);
 | 
				
			||||||
		kzfree(req_ctx->iv);
 | 
							kfree_sensitive(req_ctx->iv);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	skcipher_request_complete(req, err);
 | 
						skcipher_request_complete(req, err);
 | 
				
			||||||
| 
						 | 
					@ -994,7 +994,7 @@ static int cc_cipher_process(struct skcipher_request *req,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exit_process:
 | 
					exit_process:
 | 
				
			||||||
	if (rc != -EINPROGRESS && rc != -EBUSY) {
 | 
						if (rc != -EINPROGRESS && rc != -EBUSY) {
 | 
				
			||||||
		kzfree(req_ctx->iv);
 | 
							kfree_sensitive(req_ctx->iv);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -764,7 +764,7 @@ static int cc_hash_setkey(struct crypto_ahash *ahash, const u8 *key,
 | 
				
			||||||
		if (dma_mapping_error(dev, ctx->key_params.key_dma_addr)) {
 | 
							if (dma_mapping_error(dev, ctx->key_params.key_dma_addr)) {
 | 
				
			||||||
			dev_err(dev, "Mapping key va=0x%p len=%u for DMA failed\n",
 | 
								dev_err(dev, "Mapping key va=0x%p len=%u for DMA failed\n",
 | 
				
			||||||
				ctx->key_params.key, keylen);
 | 
									ctx->key_params.key, keylen);
 | 
				
			||||||
			kzfree(ctx->key_params.key);
 | 
								kfree_sensitive(ctx->key_params.key);
 | 
				
			||||||
			return -ENOMEM;
 | 
								return -ENOMEM;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		dev_dbg(dev, "mapping key-buffer: key_dma_addr=%pad keylen=%u\n",
 | 
							dev_dbg(dev, "mapping key-buffer: key_dma_addr=%pad keylen=%u\n",
 | 
				
			||||||
| 
						 | 
					@ -913,7 +913,7 @@ static int cc_hash_setkey(struct crypto_ahash *ahash, const u8 *key,
 | 
				
			||||||
			&ctx->key_params.key_dma_addr, ctx->key_params.keylen);
 | 
								&ctx->key_params.key_dma_addr, ctx->key_params.keylen);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(ctx->key_params.key);
 | 
						kfree_sensitive(ctx->key_params.key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -950,7 +950,7 @@ static int cc_xcbc_setkey(struct crypto_ahash *ahash,
 | 
				
			||||||
	if (dma_mapping_error(dev, ctx->key_params.key_dma_addr)) {
 | 
						if (dma_mapping_error(dev, ctx->key_params.key_dma_addr)) {
 | 
				
			||||||
		dev_err(dev, "Mapping key va=0x%p len=%u for DMA failed\n",
 | 
							dev_err(dev, "Mapping key va=0x%p len=%u for DMA failed\n",
 | 
				
			||||||
			key, keylen);
 | 
								key, keylen);
 | 
				
			||||||
		kzfree(ctx->key_params.key);
 | 
							kfree_sensitive(ctx->key_params.key);
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dev_dbg(dev, "mapping key-buffer: key_dma_addr=%pad keylen=%u\n",
 | 
						dev_dbg(dev, "mapping key-buffer: key_dma_addr=%pad keylen=%u\n",
 | 
				
			||||||
| 
						 | 
					@ -999,7 +999,7 @@ static int cc_xcbc_setkey(struct crypto_ahash *ahash,
 | 
				
			||||||
	dev_dbg(dev, "Unmapped key-buffer: key_dma_addr=%pad keylen=%u\n",
 | 
						dev_dbg(dev, "Unmapped key-buffer: key_dma_addr=%pad keylen=%u\n",
 | 
				
			||||||
		&ctx->key_params.key_dma_addr, ctx->key_params.keylen);
 | 
							&ctx->key_params.key_dma_addr, ctx->key_params.keylen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(ctx->key_params.key);
 | 
						kfree_sensitive(ctx->key_params.key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,7 +107,7 @@ void cc_req_mgr_fini(struct cc_drvdata *drvdata)
 | 
				
			||||||
	/* Kill tasklet */
 | 
						/* Kill tasklet */
 | 
				
			||||||
	tasklet_kill(&req_mgr_h->comptask);
 | 
						tasklet_kill(&req_mgr_h->comptask);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	kzfree(req_mgr_h);
 | 
						kfree_sensitive(req_mgr_h);
 | 
				
			||||||
	drvdata->request_mgr_handle = NULL;
 | 
						drvdata->request_mgr_handle = NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1157,7 +1157,7 @@ static int mv_cesa_ahmac_pad_init(struct ahash_request *req,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Set the memory region to 0 to avoid any leak. */
 | 
							/* Set the memory region to 0 to avoid any leak. */
 | 
				
			||||||
		kzfree(keydup);
 | 
							kfree_sensitive(keydup);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ret)
 | 
							if (ret)
 | 
				
			||||||
			return ret;
 | 
								return ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,7 +68,7 @@ static void cleanup_worker_threads(struct otx_cptvf *cptvf)
 | 
				
			||||||
	for (i = 0; i < cptvf->num_queues; i++)
 | 
						for (i = 0; i < cptvf->num_queues; i++)
 | 
				
			||||||
		tasklet_kill(&cwqe_info->vq_wqe[i].twork);
 | 
							tasklet_kill(&cwqe_info->vq_wqe[i].twork);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(cwqe_info);
 | 
						kfree_sensitive(cwqe_info);
 | 
				
			||||||
	cptvf->wqe_info = NULL;
 | 
						cptvf->wqe_info = NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,7 @@ static void free_pending_queues(struct otx_cpt_pending_qinfo *pqinfo)
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* free single queue */
 | 
							/* free single queue */
 | 
				
			||||||
		kzfree((queue->head));
 | 
							kfree_sensitive((queue->head));
 | 
				
			||||||
		queue->front = 0;
 | 
							queue->front = 0;
 | 
				
			||||||
		queue->rear = 0;
 | 
							queue->rear = 0;
 | 
				
			||||||
		queue->qlen = 0;
 | 
							queue->qlen = 0;
 | 
				
			||||||
| 
						 | 
					@ -176,7 +176,7 @@ static void free_command_queues(struct otx_cptvf *cptvf,
 | 
				
			||||||
			chunk->head = NULL;
 | 
								chunk->head = NULL;
 | 
				
			||||||
			chunk->dma_addr = 0;
 | 
								chunk->dma_addr = 0;
 | 
				
			||||||
			list_del(&chunk->nextchunk);
 | 
								list_del(&chunk->nextchunk);
 | 
				
			||||||
			kzfree(chunk);
 | 
								kfree_sensitive(chunk);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		queue->num_chunks = 0;
 | 
							queue->num_chunks = 0;
 | 
				
			||||||
		queue->idx = 0;
 | 
							queue->idx = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -215,7 +215,7 @@ static inline void do_request_cleanup(struct pci_dev *pdev,
 | 
				
			||||||
						 DMA_BIDIRECTIONAL);
 | 
											 DMA_BIDIRECTIONAL);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	kzfree(info);
 | 
						kfree_sensitive(info);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct otx_cptvf_wqe;
 | 
					struct otx_cptvf_wqe;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -746,7 +746,7 @@ void nx_crypto_ctx_exit(struct crypto_tfm *tfm)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(tfm);
 | 
						struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(tfm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(nx_ctx->kmem);
 | 
						kfree_sensitive(nx_ctx->kmem);
 | 
				
			||||||
	nx_ctx->csbcpb = NULL;
 | 
						nx_ctx->csbcpb = NULL;
 | 
				
			||||||
	nx_ctx->csbcpb_aead = NULL;
 | 
						nx_ctx->csbcpb_aead = NULL;
 | 
				
			||||||
	nx_ctx->in_sg = NULL;
 | 
						nx_ctx->in_sg = NULL;
 | 
				
			||||||
| 
						 | 
					@ -762,7 +762,7 @@ void nx_crypto_ctx_aead_exit(struct crypto_aead *tfm)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct nx_crypto_ctx *nx_ctx = crypto_aead_ctx(tfm);
 | 
						struct nx_crypto_ctx *nx_ctx = crypto_aead_ctx(tfm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(nx_ctx->kmem);
 | 
						kfree_sensitive(nx_ctx->kmem);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int nx_probe(struct vio_dev *viodev, const struct vio_device_id *id)
 | 
					static int nx_probe(struct vio_dev *viodev, const struct vio_device_id *id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -167,7 +167,7 @@ static int virtio_crypto_alg_skcipher_init_session(
 | 
				
			||||||
				num_in, vcrypto, GFP_ATOMIC);
 | 
									num_in, vcrypto, GFP_ATOMIC);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		spin_unlock(&vcrypto->ctrl_lock);
 | 
							spin_unlock(&vcrypto->ctrl_lock);
 | 
				
			||||||
		kzfree(cipher_key);
 | 
							kfree_sensitive(cipher_key);
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	virtqueue_kick(vcrypto->ctrl_vq);
 | 
						virtqueue_kick(vcrypto->ctrl_vq);
 | 
				
			||||||
| 
						 | 
					@ -184,7 +184,7 @@ static int virtio_crypto_alg_skcipher_init_session(
 | 
				
			||||||
		spin_unlock(&vcrypto->ctrl_lock);
 | 
							spin_unlock(&vcrypto->ctrl_lock);
 | 
				
			||||||
		pr_err("virtio_crypto: Create session failed status: %u\n",
 | 
							pr_err("virtio_crypto: Create session failed status: %u\n",
 | 
				
			||||||
			le32_to_cpu(vcrypto->input.status));
 | 
								le32_to_cpu(vcrypto->input.status));
 | 
				
			||||||
		kzfree(cipher_key);
 | 
							kfree_sensitive(cipher_key);
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -197,7 +197,7 @@ static int virtio_crypto_alg_skcipher_init_session(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_unlock(&vcrypto->ctrl_lock);
 | 
						spin_unlock(&vcrypto->ctrl_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(cipher_key);
 | 
						kfree_sensitive(cipher_key);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -472,9 +472,9 @@ __virtio_crypto_skcipher_do_req(struct virtio_crypto_sym_request *vc_sym_req,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
free_iv:
 | 
					free_iv:
 | 
				
			||||||
	kzfree(iv);
 | 
						kfree_sensitive(iv);
 | 
				
			||||||
free:
 | 
					free:
 | 
				
			||||||
	kzfree(req_data);
 | 
						kfree_sensitive(req_data);
 | 
				
			||||||
	kfree(sgs);
 | 
						kfree(sgs);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -583,7 +583,7 @@ static void virtio_crypto_skcipher_finalize_req(
 | 
				
			||||||
		scatterwalk_map_and_copy(req->iv, req->dst,
 | 
							scatterwalk_map_and_copy(req->iv, req->dst,
 | 
				
			||||||
					 req->cryptlen - AES_BLOCK_SIZE,
 | 
										 req->cryptlen - AES_BLOCK_SIZE,
 | 
				
			||||||
					 AES_BLOCK_SIZE, 0);
 | 
										 AES_BLOCK_SIZE, 0);
 | 
				
			||||||
	kzfree(vc_sym_req->iv);
 | 
						kfree_sensitive(vc_sym_req->iv);
 | 
				
			||||||
	virtcrypto_clear_request(&vc_sym_req->base);
 | 
						virtcrypto_clear_request(&vc_sym_req->base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crypto_finalize_skcipher_request(vc_sym_req->base.dataq->engine,
 | 
						crypto_finalize_skcipher_request(vc_sym_req->base.dataq->engine,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ void
 | 
				
			||||||
virtcrypto_clear_request(struct virtio_crypto_request *vc_req)
 | 
					virtcrypto_clear_request(struct virtio_crypto_request *vc_req)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (vc_req) {
 | 
						if (vc_req) {
 | 
				
			||||||
		kzfree(vc_req->req_data);
 | 
							kfree_sensitive(vc_req->req_data);
 | 
				
			||||||
		kfree(vc_req->sgs);
 | 
							kfree(vc_req->sgs);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -407,7 +407,7 @@ static void crypt_iv_lmk_dtr(struct crypt_config *cc)
 | 
				
			||||||
		crypto_free_shash(lmk->hash_tfm);
 | 
							crypto_free_shash(lmk->hash_tfm);
 | 
				
			||||||
	lmk->hash_tfm = NULL;
 | 
						lmk->hash_tfm = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(lmk->seed);
 | 
						kfree_sensitive(lmk->seed);
 | 
				
			||||||
	lmk->seed = NULL;
 | 
						lmk->seed = NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -558,9 +558,9 @@ static void crypt_iv_tcw_dtr(struct crypt_config *cc)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct iv_tcw_private *tcw = &cc->iv_gen_private.tcw;
 | 
						struct iv_tcw_private *tcw = &cc->iv_gen_private.tcw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(tcw->iv_seed);
 | 
						kfree_sensitive(tcw->iv_seed);
 | 
				
			||||||
	tcw->iv_seed = NULL;
 | 
						tcw->iv_seed = NULL;
 | 
				
			||||||
	kzfree(tcw->whitening);
 | 
						kfree_sensitive(tcw->whitening);
 | 
				
			||||||
	tcw->whitening = NULL;
 | 
						tcw->whitening = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (tcw->crc32_tfm && !IS_ERR(tcw->crc32_tfm))
 | 
						if (tcw->crc32_tfm && !IS_ERR(tcw->crc32_tfm))
 | 
				
			||||||
| 
						 | 
					@ -994,8 +994,8 @@ static int crypt_iv_elephant(struct crypt_config *cc, struct dm_crypt_request *d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kunmap_atomic(data);
 | 
						kunmap_atomic(data);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kzfree(ks);
 | 
						kfree_sensitive(ks);
 | 
				
			||||||
	kzfree(es);
 | 
						kfree_sensitive(es);
 | 
				
			||||||
	skcipher_request_free(req);
 | 
						skcipher_request_free(req);
 | 
				
			||||||
	return r;
 | 
						return r;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2294,7 +2294,7 @@ static int crypt_set_keyring_key(struct crypt_config *cc, const char *key_string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	key = request_key(type, key_desc + 1, NULL);
 | 
						key = request_key(type, key_desc + 1, NULL);
 | 
				
			||||||
	if (IS_ERR(key)) {
 | 
						if (IS_ERR(key)) {
 | 
				
			||||||
		kzfree(new_key_string);
 | 
							kfree_sensitive(new_key_string);
 | 
				
			||||||
		return PTR_ERR(key);
 | 
							return PTR_ERR(key);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2304,7 +2304,7 @@ static int crypt_set_keyring_key(struct crypt_config *cc, const char *key_string
 | 
				
			||||||
	if (ret < 0) {
 | 
						if (ret < 0) {
 | 
				
			||||||
		up_read(&key->sem);
 | 
							up_read(&key->sem);
 | 
				
			||||||
		key_put(key);
 | 
							key_put(key);
 | 
				
			||||||
		kzfree(new_key_string);
 | 
							kfree_sensitive(new_key_string);
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2318,10 +2318,10 @@ static int crypt_set_keyring_key(struct crypt_config *cc, const char *key_string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!ret) {
 | 
						if (!ret) {
 | 
				
			||||||
		set_bit(DM_CRYPT_KEY_VALID, &cc->flags);
 | 
							set_bit(DM_CRYPT_KEY_VALID, &cc->flags);
 | 
				
			||||||
		kzfree(cc->key_string);
 | 
							kfree_sensitive(cc->key_string);
 | 
				
			||||||
		cc->key_string = new_key_string;
 | 
							cc->key_string = new_key_string;
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		kzfree(new_key_string);
 | 
							kfree_sensitive(new_key_string);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2382,7 +2382,7 @@ static int crypt_set_key(struct crypt_config *cc, char *key)
 | 
				
			||||||
	clear_bit(DM_CRYPT_KEY_VALID, &cc->flags);
 | 
						clear_bit(DM_CRYPT_KEY_VALID, &cc->flags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* wipe references to any kernel keyring key */
 | 
						/* wipe references to any kernel keyring key */
 | 
				
			||||||
	kzfree(cc->key_string);
 | 
						kfree_sensitive(cc->key_string);
 | 
				
			||||||
	cc->key_string = NULL;
 | 
						cc->key_string = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Decode key from its hex representation. */
 | 
						/* Decode key from its hex representation. */
 | 
				
			||||||
| 
						 | 
					@ -2414,7 +2414,7 @@ static int crypt_wipe_key(struct crypt_config *cc)
 | 
				
			||||||
			return r;
 | 
								return r;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(cc->key_string);
 | 
						kfree_sensitive(cc->key_string);
 | 
				
			||||||
	cc->key_string = NULL;
 | 
						cc->key_string = NULL;
 | 
				
			||||||
	r = crypt_setkey(cc);
 | 
						r = crypt_setkey(cc);
 | 
				
			||||||
	memset(&cc->key, 0, cc->key_size * sizeof(u8));
 | 
						memset(&cc->key, 0, cc->key_size * sizeof(u8));
 | 
				
			||||||
| 
						 | 
					@ -2493,15 +2493,15 @@ static void crypt_dtr(struct dm_target *ti)
 | 
				
			||||||
	if (cc->dev)
 | 
						if (cc->dev)
 | 
				
			||||||
		dm_put_device(ti, cc->dev);
 | 
							dm_put_device(ti, cc->dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(cc->cipher_string);
 | 
						kfree_sensitive(cc->cipher_string);
 | 
				
			||||||
	kzfree(cc->key_string);
 | 
						kfree_sensitive(cc->key_string);
 | 
				
			||||||
	kzfree(cc->cipher_auth);
 | 
						kfree_sensitive(cc->cipher_auth);
 | 
				
			||||||
	kzfree(cc->authenc_key);
 | 
						kfree_sensitive(cc->authenc_key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_destroy(&cc->bio_alloc_lock);
 | 
						mutex_destroy(&cc->bio_alloc_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Must zero key material before freeing */
 | 
						/* Must zero key material before freeing */
 | 
				
			||||||
	kzfree(cc);
 | 
						kfree_sensitive(cc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_lock(&dm_crypt_clients_lock);
 | 
						spin_lock(&dm_crypt_clients_lock);
 | 
				
			||||||
	WARN_ON(!dm_crypt_clients_n);
 | 
						WARN_ON(!dm_crypt_clients_n);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3405,8 +3405,8 @@ static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void free_alg(struct alg_spec *a)
 | 
					static void free_alg(struct alg_spec *a)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(a->alg_string);
 | 
						kfree_sensitive(a->alg_string);
 | 
				
			||||||
	kzfree(a->key);
 | 
						kfree_sensitive(a->key);
 | 
				
			||||||
	memset(a, 0, sizeof *a);
 | 
						memset(a, 0, sizeof *a);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4337,7 +4337,7 @@ static void dm_integrity_dtr(struct dm_target *ti)
 | 
				
			||||||
		for (i = 0; i < ic->journal_sections; i++) {
 | 
							for (i = 0; i < ic->journal_sections; i++) {
 | 
				
			||||||
			struct skcipher_request *req = ic->sk_requests[i];
 | 
								struct skcipher_request *req = ic->sk_requests[i];
 | 
				
			||||||
			if (req) {
 | 
								if (req) {
 | 
				
			||||||
				kzfree(req->iv);
 | 
									kfree_sensitive(req->iv);
 | 
				
			||||||
				skcipher_request_free(req);
 | 
									skcipher_request_free(req);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -286,7 +286,7 @@ static void *alloc_dma_buffer(struct vio_dev *vdev, size_t size,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dma_mapping_error(&vdev->dev, *dma_handle)) {
 | 
						if (dma_mapping_error(&vdev->dev, *dma_handle)) {
 | 
				
			||||||
		*dma_handle = 0;
 | 
							*dma_handle = 0;
 | 
				
			||||||
		kzfree(buffer);
 | 
							kfree_sensitive(buffer);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -310,7 +310,7 @@ static void free_dma_buffer(struct vio_dev *vdev, size_t size, void *vaddr,
 | 
				
			||||||
	dma_unmap_single(&vdev->dev, dma_handle, size, DMA_BIDIRECTIONAL);
 | 
						dma_unmap_single(&vdev->dev, dma_handle, size, DMA_BIDIRECTIONAL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* deallocate memory */
 | 
						/* deallocate memory */
 | 
				
			||||||
	kzfree(vaddr);
 | 
						kfree_sensitive(vaddr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -883,7 +883,7 @@ static int ibmvmc_close(struct inode *inode, struct file *file)
 | 
				
			||||||
		spin_unlock_irqrestore(&hmc->lock, flags);
 | 
							spin_unlock_irqrestore(&hmc->lock, flags);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(session);
 | 
						kfree_sensitive(session);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -137,7 +137,7 @@ static void hclge_free_vector_ring_chain(struct hnae3_ring_chain_node *head)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (chain) {
 | 
						while (chain) {
 | 
				
			||||||
		chain_tmp = chain->next;
 | 
							chain_tmp = chain->next;
 | 
				
			||||||
		kzfree(chain);
 | 
							kfree_sensitive(chain);
 | 
				
			||||||
		chain = chain_tmp;
 | 
							chain = chain_tmp;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -960,9 +960,9 @@ int ixgbe_ipsec_vf_add_sa(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
err_aead:
 | 
					err_aead:
 | 
				
			||||||
	kzfree(xs->aead);
 | 
						kfree_sensitive(xs->aead);
 | 
				
			||||||
err_xs:
 | 
					err_xs:
 | 
				
			||||||
	kzfree(xs);
 | 
						kfree_sensitive(xs);
 | 
				
			||||||
err_out:
 | 
					err_out:
 | 
				
			||||||
	msgbuf[1] = err;
 | 
						msgbuf[1] = err;
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
| 
						 | 
					@ -1047,7 +1047,7 @@ int ixgbe_ipsec_vf_del_sa(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
 | 
				
			||||||
	ixgbe_ipsec_del_sa(xs);
 | 
						ixgbe_ipsec_del_sa(xs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* remove the xs that was made-up in the add request */
 | 
						/* remove the xs that was made-up in the add request */
 | 
				
			||||||
	kzfree(xs);
 | 
						kfree_sensitive(xs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -222,7 +222,7 @@ static void *mppe_alloc(unsigned char *options, int optlen)
 | 
				
			||||||
	kfree(state->sha1_digest);
 | 
						kfree(state->sha1_digest);
 | 
				
			||||||
	if (state->sha1) {
 | 
						if (state->sha1) {
 | 
				
			||||||
		crypto_free_shash(state->sha1->tfm);
 | 
							crypto_free_shash(state->sha1->tfm);
 | 
				
			||||||
		kzfree(state->sha1);
 | 
							kfree_sensitive(state->sha1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	kfree(state);
 | 
						kfree(state);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
| 
						 | 
					@ -238,8 +238,8 @@ static void mppe_free(void *arg)
 | 
				
			||||||
	if (state) {
 | 
						if (state) {
 | 
				
			||||||
		kfree(state->sha1_digest);
 | 
							kfree(state->sha1_digest);
 | 
				
			||||||
		crypto_free_shash(state->sha1->tfm);
 | 
							crypto_free_shash(state->sha1->tfm);
 | 
				
			||||||
		kzfree(state->sha1);
 | 
							kfree_sensitive(state->sha1);
 | 
				
			||||||
		kzfree(state);
 | 
							kfree_sensitive(state);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@ static struct noise_keypair *keypair_create(struct wg_peer *peer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void keypair_free_rcu(struct rcu_head *rcu)
 | 
					static void keypair_free_rcu(struct rcu_head *rcu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(container_of(rcu, struct noise_keypair, rcu));
 | 
						kfree_sensitive(container_of(rcu, struct noise_keypair, rcu));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void keypair_free_kref(struct kref *kref)
 | 
					static void keypair_free_kref(struct kref *kref)
 | 
				
			||||||
| 
						 | 
					@ -821,7 +821,7 @@ bool wg_noise_handshake_begin_session(struct noise_handshake *handshake,
 | 
				
			||||||
			handshake->entry.peer->device->index_hashtable,
 | 
								handshake->entry.peer->device->index_hashtable,
 | 
				
			||||||
			&handshake->entry, &new_keypair->entry);
 | 
								&handshake->entry, &new_keypair->entry);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		kzfree(new_keypair);
 | 
							kfree_sensitive(new_keypair);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rcu_read_unlock_bh();
 | 
						rcu_read_unlock_bh();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -203,7 +203,7 @@ static void rcu_release(struct rcu_head *rcu)
 | 
				
			||||||
	/* The final zeroing takes care of clearing any remaining handshake key
 | 
						/* The final zeroing takes care of clearing any remaining handshake key
 | 
				
			||||||
	 * material and other potentially sensitive information.
 | 
						 * material and other potentially sensitive information.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	kzfree(peer);
 | 
						kfree_sensitive(peer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void kref_release(struct kref *refcount)
 | 
					static void kref_release(struct kref *refcount)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1369,7 +1369,7 @@ static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans,
 | 
				
			||||||
					   &rxcb, rxq->id);
 | 
										   &rxcb, rxq->id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (reclaim) {
 | 
							if (reclaim) {
 | 
				
			||||||
			kzfree(txq->entries[cmd_index].free_buf);
 | 
								kfree_sensitive(txq->entries[cmd_index].free_buf);
 | 
				
			||||||
			txq->entries[cmd_index].free_buf = NULL;
 | 
								txq->entries[cmd_index].free_buf = NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1026,7 +1026,7 @@ static int iwl_pcie_gen2_enqueue_hcmd(struct iwl_trans *trans,
 | 
				
			||||||
	BUILD_BUG_ON(IWL_TFH_NUM_TBS > sizeof(out_meta->tbs) * BITS_PER_BYTE);
 | 
						BUILD_BUG_ON(IWL_TFH_NUM_TBS > sizeof(out_meta->tbs) * BITS_PER_BYTE);
 | 
				
			||||||
	out_meta->flags = cmd->flags;
 | 
						out_meta->flags = cmd->flags;
 | 
				
			||||||
	if (WARN_ON_ONCE(txq->entries[idx].free_buf))
 | 
						if (WARN_ON_ONCE(txq->entries[idx].free_buf))
 | 
				
			||||||
		kzfree(txq->entries[idx].free_buf);
 | 
							kfree_sensitive(txq->entries[idx].free_buf);
 | 
				
			||||||
	txq->entries[idx].free_buf = dup_buf;
 | 
						txq->entries[idx].free_buf = dup_buf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr_wide);
 | 
						trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr_wide);
 | 
				
			||||||
| 
						 | 
					@ -1257,8 +1257,8 @@ static void iwl_pcie_gen2_txq_free(struct iwl_trans *trans, int txq_id)
 | 
				
			||||||
	/* De-alloc array of command/tx buffers */
 | 
						/* De-alloc array of command/tx buffers */
 | 
				
			||||||
	if (txq_id == trans->txqs.cmd.q_id)
 | 
						if (txq_id == trans->txqs.cmd.q_id)
 | 
				
			||||||
		for (i = 0; i < txq->n_window; i++) {
 | 
							for (i = 0; i < txq->n_window; i++) {
 | 
				
			||||||
			kzfree(txq->entries[i].cmd);
 | 
								kfree_sensitive(txq->entries[i].cmd);
 | 
				
			||||||
			kzfree(txq->entries[i].free_buf);
 | 
								kfree_sensitive(txq->entries[i].free_buf);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	del_timer_sync(&txq->stuck_timer);
 | 
						del_timer_sync(&txq->stuck_timer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -721,8 +721,8 @@ static void iwl_pcie_txq_free(struct iwl_trans *trans, int txq_id)
 | 
				
			||||||
	/* De-alloc array of command/tx buffers */
 | 
						/* De-alloc array of command/tx buffers */
 | 
				
			||||||
	if (txq_id == trans->txqs.cmd.q_id)
 | 
						if (txq_id == trans->txqs.cmd.q_id)
 | 
				
			||||||
		for (i = 0; i < txq->n_window; i++) {
 | 
							for (i = 0; i < txq->n_window; i++) {
 | 
				
			||||||
			kzfree(txq->entries[i].cmd);
 | 
								kfree_sensitive(txq->entries[i].cmd);
 | 
				
			||||||
			kzfree(txq->entries[i].free_buf);
 | 
								kfree_sensitive(txq->entries[i].free_buf);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* De-alloc circular buffer of TFDs */
 | 
						/* De-alloc circular buffer of TFDs */
 | 
				
			||||||
| 
						 | 
					@ -1765,7 +1765,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
 | 
				
			||||||
	BUILD_BUG_ON(IWL_TFH_NUM_TBS > sizeof(out_meta->tbs) * BITS_PER_BYTE);
 | 
						BUILD_BUG_ON(IWL_TFH_NUM_TBS > sizeof(out_meta->tbs) * BITS_PER_BYTE);
 | 
				
			||||||
	out_meta->flags = cmd->flags;
 | 
						out_meta->flags = cmd->flags;
 | 
				
			||||||
	if (WARN_ON_ONCE(txq->entries[idx].free_buf))
 | 
						if (WARN_ON_ONCE(txq->entries[idx].free_buf))
 | 
				
			||||||
		kzfree(txq->entries[idx].free_buf);
 | 
							kfree_sensitive(txq->entries[idx].free_buf);
 | 
				
			||||||
	txq->entries[idx].free_buf = dup_buf;
 | 
						txq->entries[idx].free_buf = dup_buf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr_wide);
 | 
						trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr_wide);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,8 +31,8 @@ static int orinoco_set_key(struct orinoco_private *priv, int index,
 | 
				
			||||||
			   enum orinoco_alg alg, const u8 *key, int key_len,
 | 
								   enum orinoco_alg alg, const u8 *key, int key_len,
 | 
				
			||||||
			   const u8 *seq, int seq_len)
 | 
								   const u8 *seq, int seq_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(priv->keys[index].key);
 | 
						kfree_sensitive(priv->keys[index].key);
 | 
				
			||||||
	kzfree(priv->keys[index].seq);
 | 
						kfree_sensitive(priv->keys[index].seq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (key_len) {
 | 
						if (key_len) {
 | 
				
			||||||
		priv->keys[index].key = kzalloc(key_len, GFP_ATOMIC);
 | 
							priv->keys[index].key = kzalloc(key_len, GFP_ATOMIC);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -219,8 +219,8 @@ static inline void ap_init_message(struct ap_message *ap_msg)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static inline void ap_release_message(struct ap_message *ap_msg)
 | 
					static inline void ap_release_message(struct ap_message *ap_msg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(ap_msg->msg);
 | 
						kfree_sensitive(ap_msg->msg);
 | 
				
			||||||
	kzfree(ap_msg->private);
 | 
						kfree_sensitive(ap_msg->private);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -245,7 +245,7 @@ michael_mic(u8 *key, u8 *data, unsigned int len, u8 priority, u8 *result)
 | 
				
			||||||
	ret = crypto_shash_finup(desc, data + 12, len - 12, result);
 | 
						ret = crypto_shash_finup(desc, data + 12, len - 12, result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
err_free_desc:
 | 
					err_free_desc:
 | 
				
			||||||
	kzfree(desc);
 | 
						kfree_sensitive(desc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
err_free_tfm:
 | 
					err_free_tfm:
 | 
				
			||||||
	crypto_free_shash(tfm);
 | 
						crypto_free_shash(tfm);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2251,7 +2251,7 @@ static void gf_mulx(u8 *pad)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void aes_encrypt_deinit(void *ctx)
 | 
					static void aes_encrypt_deinit(void *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(ctx);
 | 
						kfree_sensitive(ctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -429,7 +429,7 @@ static netdev_tx_t p80211knetdev_hard_start_xmit(struct sk_buff *skb,
 | 
				
			||||||
failed:
 | 
					failed:
 | 
				
			||||||
	/* Free up the WEP buffer if it's not the same as the skb */
 | 
						/* Free up the WEP buffer if it's not the same as the skb */
 | 
				
			||||||
	if ((p80211_wep.data) && (p80211_wep.data != skb->data))
 | 
						if ((p80211_wep.data) && (p80211_wep.data != skb->data))
 | 
				
			||||||
		kzfree(p80211_wep.data);
 | 
							kfree_sensitive(p80211_wep.data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* we always free the skb here, never in a lower level. */
 | 
						/* we always free the skb here, never in a lower level. */
 | 
				
			||||||
	if (!result)
 | 
						if (!result)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -484,7 +484,7 @@ static int chap_server_compute_hash(
 | 
				
			||||||
	pr_debug("[server] Sending CHAP_R=0x%s\n", response);
 | 
						pr_debug("[server] Sending CHAP_R=0x%s\n", response);
 | 
				
			||||||
	auth_ret = 0;
 | 
						auth_ret = 0;
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kzfree(desc);
 | 
						kfree_sensitive(desc);
 | 
				
			||||||
	if (tfm)
 | 
						if (tfm)
 | 
				
			||||||
		crypto_free_shash(tfm);
 | 
							crypto_free_shash(tfm);
 | 
				
			||||||
	kfree(initiatorchg);
 | 
						kfree(initiatorchg);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -797,7 +797,7 @@ calc_seckey(struct cifs_ses *ses)
 | 
				
			||||||
	ses->auth_key.len = CIFS_SESS_KEY_SIZE;
 | 
						ses->auth_key.len = CIFS_SESS_KEY_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memzero_explicit(sec_key, CIFS_SESS_KEY_SIZE);
 | 
						memzero_explicit(sec_key, CIFS_SESS_KEY_SIZE);
 | 
				
			||||||
	kzfree(ctx_arc4);
 | 
						kfree_sensitive(ctx_arc4);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2182,7 +2182,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
 | 
				
			||||||
			tmp_end++;
 | 
								tmp_end++;
 | 
				
			||||||
			if (!(tmp_end < end && tmp_end[1] == delim)) {
 | 
								if (!(tmp_end < end && tmp_end[1] == delim)) {
 | 
				
			||||||
				/* No it is not. Set the password to NULL */
 | 
									/* No it is not. Set the password to NULL */
 | 
				
			||||||
				kzfree(vol->password);
 | 
									kfree_sensitive(vol->password);
 | 
				
			||||||
				vol->password = NULL;
 | 
									vol->password = NULL;
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					@ -2220,7 +2220,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
 | 
				
			||||||
					options = end;
 | 
										options = end;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			kzfree(vol->password);
 | 
								kfree_sensitive(vol->password);
 | 
				
			||||||
			/* Now build new password string */
 | 
								/* Now build new password string */
 | 
				
			||||||
			temp_len = strlen(value);
 | 
								temp_len = strlen(value);
 | 
				
			||||||
			vol->password = kzalloc(temp_len+1, GFP_KERNEL);
 | 
								vol->password = kzalloc(temp_len+1, GFP_KERNEL);
 | 
				
			||||||
| 
						 | 
					@ -3198,7 +3198,7 @@ cifs_set_cifscreds(struct smb_vol *vol, struct cifs_ses *ses)
 | 
				
			||||||
			rc = -ENOMEM;
 | 
								rc = -ENOMEM;
 | 
				
			||||||
			kfree(vol->username);
 | 
								kfree(vol->username);
 | 
				
			||||||
			vol->username = NULL;
 | 
								vol->username = NULL;
 | 
				
			||||||
			kzfree(vol->password);
 | 
								kfree_sensitive(vol->password);
 | 
				
			||||||
			vol->password = NULL;
 | 
								vol->password = NULL;
 | 
				
			||||||
			goto out_key_put;
 | 
								goto out_key_put;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -4219,7 +4219,7 @@ void
 | 
				
			||||||
cifs_cleanup_volume_info_contents(struct smb_vol *volume_info)
 | 
					cifs_cleanup_volume_info_contents(struct smb_vol *volume_info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kfree(volume_info->username);
 | 
						kfree(volume_info->username);
 | 
				
			||||||
	kzfree(volume_info->password);
 | 
						kfree_sensitive(volume_info->password);
 | 
				
			||||||
	kfree(volume_info->UNC);
 | 
						kfree(volume_info->UNC);
 | 
				
			||||||
	kfree(volume_info->domainname);
 | 
						kfree(volume_info->domainname);
 | 
				
			||||||
	kfree(volume_info->iocharset);
 | 
						kfree(volume_info->iocharset);
 | 
				
			||||||
| 
						 | 
					@ -5345,7 +5345,7 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kfree(vol_info->username);
 | 
						kfree(vol_info->username);
 | 
				
			||||||
	kzfree(vol_info->password);
 | 
						kfree_sensitive(vol_info->password);
 | 
				
			||||||
	kfree(vol_info);
 | 
						kfree(vol_info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return tcon;
 | 
						return tcon;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1131,7 +1131,7 @@ static int dup_vol(struct smb_vol *vol, struct smb_vol *new)
 | 
				
			||||||
err_free_unc:
 | 
					err_free_unc:
 | 
				
			||||||
	kfree(new->UNC);
 | 
						kfree(new->UNC);
 | 
				
			||||||
err_free_password:
 | 
					err_free_password:
 | 
				
			||||||
	kzfree(new->password);
 | 
						kfree_sensitive(new->password);
 | 
				
			||||||
err_free_username:
 | 
					err_free_username:
 | 
				
			||||||
	kfree(new->username);
 | 
						kfree(new->username);
 | 
				
			||||||
	kfree(new);
 | 
						kfree(new);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -103,12 +103,12 @@ sesInfoFree(struct cifs_ses *buf_to_free)
 | 
				
			||||||
	kfree(buf_to_free->serverOS);
 | 
						kfree(buf_to_free->serverOS);
 | 
				
			||||||
	kfree(buf_to_free->serverDomain);
 | 
						kfree(buf_to_free->serverDomain);
 | 
				
			||||||
	kfree(buf_to_free->serverNOS);
 | 
						kfree(buf_to_free->serverNOS);
 | 
				
			||||||
	kzfree(buf_to_free->password);
 | 
						kfree_sensitive(buf_to_free->password);
 | 
				
			||||||
	kfree(buf_to_free->user_name);
 | 
						kfree(buf_to_free->user_name);
 | 
				
			||||||
	kfree(buf_to_free->domainName);
 | 
						kfree(buf_to_free->domainName);
 | 
				
			||||||
	kzfree(buf_to_free->auth_key.response);
 | 
						kfree_sensitive(buf_to_free->auth_key.response);
 | 
				
			||||||
	kfree(buf_to_free->iface_list);
 | 
						kfree(buf_to_free->iface_list);
 | 
				
			||||||
	kzfree(buf_to_free);
 | 
						kfree_sensitive(buf_to_free);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct cifs_tcon *
 | 
					struct cifs_tcon *
 | 
				
			||||||
| 
						 | 
					@ -148,7 +148,7 @@ tconInfoFree(struct cifs_tcon *buf_to_free)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	atomic_dec(&tconInfoAllocCount);
 | 
						atomic_dec(&tconInfoAllocCount);
 | 
				
			||||||
	kfree(buf_to_free->nativeFileSystem);
 | 
						kfree(buf_to_free->nativeFileSystem);
 | 
				
			||||||
	kzfree(buf_to_free->password);
 | 
						kfree_sensitive(buf_to_free->password);
 | 
				
			||||||
	kfree(buf_to_free->crfid.fid);
 | 
						kfree(buf_to_free->crfid.fid);
 | 
				
			||||||
#ifdef CONFIG_CIFS_DFS_UPCALL
 | 
					#ifdef CONFIG_CIFS_DFS_UPCALL
 | 
				
			||||||
	kfree(buf_to_free->dfs_path);
 | 
						kfree(buf_to_free->dfs_path);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
#include <linux/blkdev.h>
 | 
					#include <linux/blkdev.h>
 | 
				
			||||||
#include <linux/buffer_head.h>
 | 
					#include <linux/buffer_head.h>
 | 
				
			||||||
#include <linux/sched/mm.h>
 | 
					#include <linux/sched/mm.h>
 | 
				
			||||||
 | 
					#include <linux/slab.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "fscrypt_private.h"
 | 
					#include "fscrypt_private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -187,7 +188,7 @@ int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
	for (i = 0; i < queue_refs; i++)
 | 
						for (i = 0; i < queue_refs; i++)
 | 
				
			||||||
		blk_put_queue(blk_key->devs[i]);
 | 
							blk_put_queue(blk_key->devs[i]);
 | 
				
			||||||
	kzfree(blk_key);
 | 
						kfree_sensitive(blk_key);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -201,7 +202,7 @@ void fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key)
 | 
				
			||||||
			blk_crypto_evict_key(blk_key->devs[i], &blk_key->base);
 | 
								blk_crypto_evict_key(blk_key->devs[i], &blk_key->base);
 | 
				
			||||||
			blk_put_queue(blk_key->devs[i]);
 | 
								blk_put_queue(blk_key->devs[i]);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		kzfree(blk_key);
 | 
							kfree_sensitive(blk_key);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,7 @@ static void free_master_key(struct fscrypt_master_key *mk)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	key_put(mk->mk_users);
 | 
						key_put(mk->mk_users);
 | 
				
			||||||
	kzfree(mk);
 | 
						kfree_sensitive(mk);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline bool valid_key_spec(const struct fscrypt_key_specifier *spec)
 | 
					static inline bool valid_key_spec(const struct fscrypt_key_specifier *spec)
 | 
				
			||||||
| 
						 | 
					@ -531,7 +531,7 @@ static int fscrypt_provisioning_key_preparse(struct key_preparsed_payload *prep)
 | 
				
			||||||
static void fscrypt_provisioning_key_free_preparse(
 | 
					static void fscrypt_provisioning_key_free_preparse(
 | 
				
			||||||
					struct key_preparsed_payload *prep)
 | 
										struct key_preparsed_payload *prep)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(prep->payload.data[0]);
 | 
						kfree_sensitive(prep->payload.data[0]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void fscrypt_provisioning_key_describe(const struct key *key,
 | 
					static void fscrypt_provisioning_key_describe(const struct key *key,
 | 
				
			||||||
| 
						 | 
					@ -548,7 +548,7 @@ static void fscrypt_provisioning_key_describe(const struct key *key,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void fscrypt_provisioning_key_destroy(struct key *key)
 | 
					static void fscrypt_provisioning_key_destroy(struct key *key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(key->payload.data[0]);
 | 
						kfree_sensitive(key->payload.data[0]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct key_type key_type_fscrypt_provisioning = {
 | 
					static struct key_type key_type_fscrypt_provisioning = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -155,7 +155,7 @@ static void free_direct_key(struct fscrypt_direct_key *dk)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (dk) {
 | 
						if (dk) {
 | 
				
			||||||
		fscrypt_destroy_prepared_key(&dk->dk_key);
 | 
							fscrypt_destroy_prepared_key(&dk->dk_key);
 | 
				
			||||||
		kzfree(dk);
 | 
							kfree_sensitive(dk);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -283,7 +283,7 @@ static int setup_v1_file_key_derived(struct fscrypt_info *ci,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = fscrypt_set_per_file_enc_key(ci, derived_key);
 | 
						err = fscrypt_set_per_file_enc_key(ci, derived_key);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	kzfree(derived_key);
 | 
						kfree_sensitive(derived_key);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -838,7 +838,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes,
 | 
				
			||||||
out_release_free_unlock:
 | 
					out_release_free_unlock:
 | 
				
			||||||
	crypto_free_shash(s->hash_tfm);
 | 
						crypto_free_shash(s->hash_tfm);
 | 
				
			||||||
out_free_unlock:
 | 
					out_free_unlock:
 | 
				
			||||||
	kzfree(s->block_aligned_filename);
 | 
						kfree_sensitive(s->block_aligned_filename);
 | 
				
			||||||
out_unlock:
 | 
					out_unlock:
 | 
				
			||||||
	mutex_unlock(s->tfm_mutex);
 | 
						mutex_unlock(s->tfm_mutex);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
| 
						 | 
					@ -847,7 +847,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes,
 | 
				
			||||||
		key_put(auth_tok_key);
 | 
							key_put(auth_tok_key);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	skcipher_request_free(s->skcipher_req);
 | 
						skcipher_request_free(s->skcipher_req);
 | 
				
			||||||
	kzfree(s->hash_desc);
 | 
						kfree_sensitive(s->hash_desc);
 | 
				
			||||||
	kfree(s);
 | 
						kfree(s);
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -175,7 +175,7 @@ int ecryptfs_exorcise_daemon(struct ecryptfs_daemon *daemon)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	hlist_del(&daemon->euid_chain);
 | 
						hlist_del(&daemon->euid_chain);
 | 
				
			||||||
	mutex_unlock(&daemon->mux);
 | 
						mutex_unlock(&daemon->mux);
 | 
				
			||||||
	kzfree(daemon);
 | 
						kfree_sensitive(daemon);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -425,7 +425,7 @@ static inline struct aead_request *aead_request_alloc(struct crypto_aead *tfm,
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static inline void aead_request_free(struct aead_request *req)
 | 
					static inline void aead_request_free(struct aead_request *req)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -207,7 +207,7 @@ static inline struct akcipher_request *akcipher_request_alloc(
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static inline void akcipher_request_free(struct akcipher_request *req)
 | 
					static inline void akcipher_request_free(struct akcipher_request *req)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -230,7 +230,7 @@ void gf128mul_4k_bbe(be128 *a, const struct gf128mul_4k *t);
 | 
				
			||||||
void gf128mul_x8_ble(le128 *r, const le128 *x);
 | 
					void gf128mul_x8_ble(le128 *r, const le128 *x);
 | 
				
			||||||
static inline void gf128mul_free_4k(struct gf128mul_4k *t)
 | 
					static inline void gf128mul_free_4k(struct gf128mul_4k *t)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(t);
 | 
						kfree_sensitive(t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -606,7 +606,7 @@ static inline struct ahash_request *ahash_request_alloc(
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static inline void ahash_request_free(struct ahash_request *req)
 | 
					static inline void ahash_request_free(struct ahash_request *req)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void ahash_request_zero(struct ahash_request *req)
 | 
					static inline void ahash_request_zero(struct ahash_request *req)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,7 @@ static inline struct acomp_req *__acomp_request_alloc(struct crypto_acomp *tfm)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void __acomp_request_free(struct acomp_req *req)
 | 
					static inline void __acomp_request_free(struct acomp_req *req)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -187,7 +187,7 @@ static inline struct kpp_request *kpp_request_alloc(struct crypto_kpp *tfm,
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static inline void kpp_request_free(struct kpp_request *req)
 | 
					static inline void kpp_request_free(struct kpp_request *req)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -508,7 +508,7 @@ static inline struct skcipher_request *skcipher_request_alloc(
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static inline void skcipher_request_free(struct skcipher_request *req)
 | 
					static inline void skcipher_request_free(struct skcipher_request *req)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void skcipher_request_zero(struct skcipher_request *req)
 | 
					static inline void skcipher_request_zero(struct skcipher_request *req)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -186,10 +186,12 @@ void memcg_deactivate_kmem_caches(struct mem_cgroup *, struct mem_cgroup *);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void * __must_check krealloc(const void *, size_t, gfp_t);
 | 
					void * __must_check krealloc(const void *, size_t, gfp_t);
 | 
				
			||||||
void kfree(const void *);
 | 
					void kfree(const void *);
 | 
				
			||||||
void kzfree(const void *);
 | 
					void kfree_sensitive(const void *);
 | 
				
			||||||
size_t __ksize(const void *);
 | 
					size_t __ksize(const void *);
 | 
				
			||||||
size_t ksize(const void *);
 | 
					size_t ksize(const void *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define kzfree(x)	kfree_sensitive(x)	/* For backward compatibility */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR
 | 
					#ifdef CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR
 | 
				
			||||||
void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
 | 
					void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
 | 
				
			||||||
			bool to_user);
 | 
								bool to_user);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ void mpi_free_limb_space(mpi_ptr_t a)
 | 
				
			||||||
	if (!a)
 | 
						if (!a)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(a);
 | 
						kfree_sensitive(a);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mpi_assign_limb_space(MPI a, mpi_ptr_t ap, unsigned nlimbs)
 | 
					void mpi_assign_limb_space(MPI a, mpi_ptr_t ap, unsigned nlimbs)
 | 
				
			||||||
| 
						 | 
					@ -95,7 +95,7 @@ int mpi_resize(MPI a, unsigned nlimbs)
 | 
				
			||||||
		if (!p)
 | 
							if (!p)
 | 
				
			||||||
			return -ENOMEM;
 | 
								return -ENOMEM;
 | 
				
			||||||
		memcpy(p, a->d, a->alloced * sizeof(mpi_limb_t));
 | 
							memcpy(p, a->d, a->alloced * sizeof(mpi_limb_t));
 | 
				
			||||||
		kzfree(a->d);
 | 
							kfree_sensitive(a->d);
 | 
				
			||||||
		a->d = p;
 | 
							a->d = p;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		a->d = kcalloc(nlimbs, sizeof(mpi_limb_t), GFP_KERNEL);
 | 
							a->d = kcalloc(nlimbs, sizeof(mpi_limb_t), GFP_KERNEL);
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@ void mpi_free(MPI a)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (a->flags & 4)
 | 
						if (a->flags & 4)
 | 
				
			||||||
		kzfree(a->d);
 | 
							kfree_sensitive(a->d);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		mpi_free_limb_space(a->d);
 | 
							mpi_free_limb_space(a->d);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -766,15 +766,15 @@ static noinline void __init kmalloc_double_kzfree(void)
 | 
				
			||||||
	char *ptr;
 | 
						char *ptr;
 | 
				
			||||||
	size_t size = 16;
 | 
						size_t size = 16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pr_info("double-free (kzfree)\n");
 | 
						pr_info("double-free (kfree_sensitive)\n");
 | 
				
			||||||
	ptr = kmalloc(size, GFP_KERNEL);
 | 
						ptr = kmalloc(size, GFP_KERNEL);
 | 
				
			||||||
	if (!ptr) {
 | 
						if (!ptr) {
 | 
				
			||||||
		pr_err("Allocation failed\n");
 | 
							pr_err("Allocation failed\n");
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(ptr);
 | 
						kfree_sensitive(ptr);
 | 
				
			||||||
	kzfree(ptr);
 | 
						kfree_sensitive(ptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_KASAN_VMALLOC
 | 
					#ifdef CONFIG_KASAN_VMALLOC
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1729,17 +1729,17 @@ void *krealloc(const void *p, size_t new_size, gfp_t flags)
 | 
				
			||||||
EXPORT_SYMBOL(krealloc);
 | 
					EXPORT_SYMBOL(krealloc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * kzfree - like kfree but zero memory
 | 
					 * kfree_sensitive - Clear sensitive information in memory before freeing
 | 
				
			||||||
 * @p: object to free memory of
 | 
					 * @p: object to free memory of
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The memory of the object @p points to is zeroed before freed.
 | 
					 * The memory of the object @p points to is zeroed before freed.
 | 
				
			||||||
 * If @p is %NULL, kzfree() does nothing.
 | 
					 * If @p is %NULL, kfree_sensitive() does nothing.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Note: this function zeroes the whole allocated buffer which can be a good
 | 
					 * Note: this function zeroes the whole allocated buffer which can be a good
 | 
				
			||||||
 * deal bigger than the requested buffer size passed to kmalloc(). So be
 | 
					 * deal bigger than the requested buffer size passed to kmalloc(). So be
 | 
				
			||||||
 * careful when using this function in performance sensitive code.
 | 
					 * careful when using this function in performance sensitive code.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void kzfree(const void *p)
 | 
					void kfree_sensitive(const void *p)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	size_t ks;
 | 
						size_t ks;
 | 
				
			||||||
	void *mem = (void *)p;
 | 
						void *mem = (void *)p;
 | 
				
			||||||
| 
						 | 
					@ -1750,7 +1750,7 @@ void kzfree(const void *p)
 | 
				
			||||||
	memzero_explicit(mem, ks);
 | 
						memzero_explicit(mem, ks);
 | 
				
			||||||
	kfree(mem);
 | 
						kfree(mem);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(kzfree);
 | 
					EXPORT_SYMBOL(kfree_sensitive);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * ksize - get the actual amount of memory allocated for a given object
 | 
					 * ksize - get the actual amount of memory allocated for a given object
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -180,7 +180,7 @@ static int cache_hit(in_cache_entry *entry, struct mpoa_client *mpc)
 | 
				
			||||||
static void in_cache_put(in_cache_entry *entry)
 | 
					static void in_cache_put(in_cache_entry *entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (refcount_dec_and_test(&entry->use)) {
 | 
						if (refcount_dec_and_test(&entry->use)) {
 | 
				
			||||||
		kzfree(entry);
 | 
							kfree_sensitive(entry);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -415,7 +415,7 @@ static eg_cache_entry *eg_cache_get_by_src_ip(__be32 ipaddr,
 | 
				
			||||||
static void eg_cache_put(eg_cache_entry *entry)
 | 
					static void eg_cache_put(eg_cache_entry *entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (refcount_dec_and_test(&entry->use)) {
 | 
						if (refcount_dec_and_test(&entry->use)) {
 | 
				
			||||||
		kzfree(entry);
 | 
							kfree_sensitive(entry);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -104,7 +104,7 @@ int compute_ecdh_secret(struct crypto_kpp *tfm, const u8 public_key[64],
 | 
				
			||||||
free_all:
 | 
					free_all:
 | 
				
			||||||
	kpp_request_free(req);
 | 
						kpp_request_free(req);
 | 
				
			||||||
free_tmp:
 | 
					free_tmp:
 | 
				
			||||||
	kzfree(tmp);
 | 
						kfree_sensitive(tmp);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -151,9 +151,9 @@ int set_ecdh_privkey(struct crypto_kpp *tfm, const u8 private_key[32])
 | 
				
			||||||
	err = crypto_kpp_set_secret(tfm, buf, buf_len);
 | 
						err = crypto_kpp_set_secret(tfm, buf, buf_len);
 | 
				
			||||||
	/* fall through */
 | 
						/* fall through */
 | 
				
			||||||
free_all:
 | 
					free_all:
 | 
				
			||||||
	kzfree(buf);
 | 
						kfree_sensitive(buf);
 | 
				
			||||||
free_tmp:
 | 
					free_tmp:
 | 
				
			||||||
	kzfree(tmp);
 | 
						kfree_sensitive(tmp);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -753,9 +753,9 @@ static void smp_chan_destroy(struct l2cap_conn *conn)
 | 
				
			||||||
	complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
 | 
						complete = test_bit(SMP_FLAG_COMPLETE, &smp->flags);
 | 
				
			||||||
	mgmt_smp_complete(hcon, complete);
 | 
						mgmt_smp_complete(hcon, complete);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(smp->csrk);
 | 
						kfree_sensitive(smp->csrk);
 | 
				
			||||||
	kzfree(smp->slave_csrk);
 | 
						kfree_sensitive(smp->slave_csrk);
 | 
				
			||||||
	kzfree(smp->link_key);
 | 
						kfree_sensitive(smp->link_key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crypto_free_shash(smp->tfm_cmac);
 | 
						crypto_free_shash(smp->tfm_cmac);
 | 
				
			||||||
	crypto_free_kpp(smp->tfm_ecdh);
 | 
						crypto_free_kpp(smp->tfm_ecdh);
 | 
				
			||||||
| 
						 | 
					@ -789,7 +789,7 @@ static void smp_chan_destroy(struct l2cap_conn *conn)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	chan->data = NULL;
 | 
						chan->data = NULL;
 | 
				
			||||||
	kzfree(smp);
 | 
						kfree_sensitive(smp);
 | 
				
			||||||
	hci_conn_drop(hcon);
 | 
						hci_conn_drop(hcon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1156,7 +1156,7 @@ static void sc_generate_link_key(struct smp_chan *smp)
 | 
				
			||||||
		const u8 salt[16] = { 0x31, 0x70, 0x6d, 0x74 };
 | 
							const u8 salt[16] = { 0x31, 0x70, 0x6d, 0x74 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (smp_h7(smp->tfm_cmac, smp->tk, salt, smp->link_key)) {
 | 
							if (smp_h7(smp->tfm_cmac, smp->tk, salt, smp->link_key)) {
 | 
				
			||||||
			kzfree(smp->link_key);
 | 
								kfree_sensitive(smp->link_key);
 | 
				
			||||||
			smp->link_key = NULL;
 | 
								smp->link_key = NULL;
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -1165,14 +1165,14 @@ static void sc_generate_link_key(struct smp_chan *smp)
 | 
				
			||||||
		const u8 tmp1[4] = { 0x31, 0x70, 0x6d, 0x74 };
 | 
							const u8 tmp1[4] = { 0x31, 0x70, 0x6d, 0x74 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (smp_h6(smp->tfm_cmac, smp->tk, tmp1, smp->link_key)) {
 | 
							if (smp_h6(smp->tfm_cmac, smp->tk, tmp1, smp->link_key)) {
 | 
				
			||||||
			kzfree(smp->link_key);
 | 
								kfree_sensitive(smp->link_key);
 | 
				
			||||||
			smp->link_key = NULL;
 | 
								smp->link_key = NULL;
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (smp_h6(smp->tfm_cmac, smp->link_key, lebr, smp->link_key)) {
 | 
						if (smp_h6(smp->tfm_cmac, smp->link_key, lebr, smp->link_key)) {
 | 
				
			||||||
		kzfree(smp->link_key);
 | 
							kfree_sensitive(smp->link_key);
 | 
				
			||||||
		smp->link_key = NULL;
 | 
							smp->link_key = NULL;
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1407,7 +1407,7 @@ static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
 | 
				
			||||||
free_shash:
 | 
					free_shash:
 | 
				
			||||||
	crypto_free_shash(smp->tfm_cmac);
 | 
						crypto_free_shash(smp->tfm_cmac);
 | 
				
			||||||
zfree_smp:
 | 
					zfree_smp:
 | 
				
			||||||
	kzfree(smp);
 | 
						kfree_sensitive(smp);
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3278,7 +3278,7 @@ static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
 | 
				
			||||||
	tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
 | 
						tfm_cmac = crypto_alloc_shash("cmac(aes)", 0, 0);
 | 
				
			||||||
	if (IS_ERR(tfm_cmac)) {
 | 
						if (IS_ERR(tfm_cmac)) {
 | 
				
			||||||
		BT_ERR("Unable to create CMAC crypto context");
 | 
							BT_ERR("Unable to create CMAC crypto context");
 | 
				
			||||||
		kzfree(smp);
 | 
							kfree_sensitive(smp);
 | 
				
			||||||
		return ERR_CAST(tfm_cmac);
 | 
							return ERR_CAST(tfm_cmac);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3286,7 +3286,7 @@ static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
 | 
				
			||||||
	if (IS_ERR(tfm_ecdh)) {
 | 
						if (IS_ERR(tfm_ecdh)) {
 | 
				
			||||||
		BT_ERR("Unable to create ECDH crypto context");
 | 
							BT_ERR("Unable to create ECDH crypto context");
 | 
				
			||||||
		crypto_free_shash(tfm_cmac);
 | 
							crypto_free_shash(tfm_cmac);
 | 
				
			||||||
		kzfree(smp);
 | 
							kfree_sensitive(smp);
 | 
				
			||||||
		return ERR_CAST(tfm_ecdh);
 | 
							return ERR_CAST(tfm_ecdh);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3300,7 +3300,7 @@ static struct l2cap_chan *smp_add_cid(struct hci_dev *hdev, u16 cid)
 | 
				
			||||||
		if (smp) {
 | 
							if (smp) {
 | 
				
			||||||
			crypto_free_shash(smp->tfm_cmac);
 | 
								crypto_free_shash(smp->tfm_cmac);
 | 
				
			||||||
			crypto_free_kpp(smp->tfm_ecdh);
 | 
								crypto_free_kpp(smp->tfm_ecdh);
 | 
				
			||||||
			kzfree(smp);
 | 
								kfree_sensitive(smp);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return ERR_PTR(-ENOMEM);
 | 
							return ERR_PTR(-ENOMEM);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -3347,7 +3347,7 @@ static void smp_del_chan(struct l2cap_chan *chan)
 | 
				
			||||||
		chan->data = NULL;
 | 
							chan->data = NULL;
 | 
				
			||||||
		crypto_free_shash(smp->tfm_cmac);
 | 
							crypto_free_shash(smp->tfm_cmac);
 | 
				
			||||||
		crypto_free_kpp(smp->tfm_ecdh);
 | 
							crypto_free_kpp(smp->tfm_ecdh);
 | 
				
			||||||
		kzfree(smp);
 | 
							kfree_sensitive(smp);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	l2cap_chan_put(chan);
 | 
						l2cap_chan_put(chan);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2257,7 +2257,7 @@ static inline void __sock_kfree_s(struct sock *sk, void *mem, int size,
 | 
				
			||||||
	if (WARN_ON_ONCE(!mem))
 | 
						if (WARN_ON_ONCE(!mem))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	if (nullify)
 | 
						if (nullify)
 | 
				
			||||||
		kzfree(mem);
 | 
							kfree_sensitive(mem);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		kfree(mem);
 | 
							kfree(mem);
 | 
				
			||||||
	atomic_sub(size, &sk->sk_omem_alloc);
 | 
						atomic_sub(size, &sk->sk_omem_alloc);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,7 @@ static void tcp_fastopen_ctx_free(struct rcu_head *head)
 | 
				
			||||||
	struct tcp_fastopen_context *ctx =
 | 
						struct tcp_fastopen_context *ctx =
 | 
				
			||||||
	    container_of(head, struct tcp_fastopen_context, rcu);
 | 
						    container_of(head, struct tcp_fastopen_context, rcu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(ctx);
 | 
						kfree_sensitive(ctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void tcp_fastopen_destroy_cipher(struct sock *sk)
 | 
					void tcp_fastopen_destroy_cipher(struct sock *sk)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,7 @@ int aead_encrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len,
 | 
				
			||||||
	aead_request_set_ad(aead_req, sg[0].length);
 | 
						aead_request_set_ad(aead_req, sg[0].length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crypto_aead_encrypt(aead_req);
 | 
						crypto_aead_encrypt(aead_req);
 | 
				
			||||||
	kzfree(aead_req);
 | 
						kfree_sensitive(aead_req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -76,7 +76,7 @@ int aead_decrypt(struct crypto_aead *tfm, u8 *b_0, u8 *aad, size_t aad_len,
 | 
				
			||||||
	aead_request_set_ad(aead_req, sg[0].length);
 | 
						aead_request_set_ad(aead_req, sg[0].length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = crypto_aead_decrypt(aead_req);
 | 
						err = crypto_aead_decrypt(aead_req);
 | 
				
			||||||
	kzfree(aead_req);
 | 
						kfree_sensitive(aead_req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,7 +60,7 @@ int ieee80211_aes_gmac(struct crypto_aead *tfm, const u8 *aad, u8 *nonce,
 | 
				
			||||||
	aead_request_set_ad(aead_req, GMAC_AAD_LEN + data_len);
 | 
						aead_request_set_ad(aead_req, GMAC_AAD_LEN + data_len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crypto_aead_encrypt(aead_req);
 | 
						crypto_aead_encrypt(aead_req);
 | 
				
			||||||
	kzfree(aead_req);
 | 
						kfree_sensitive(aead_req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -732,7 +732,7 @@ static void ieee80211_key_free_common(struct ieee80211_key *key)
 | 
				
			||||||
		ieee80211_aes_gcm_key_free(key->u.gcmp.tfm);
 | 
							ieee80211_aes_gcm_key_free(key->u.gcmp.tfm);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	kzfree(key);
 | 
						kfree_sensitive(key);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __ieee80211_key_destroy(struct ieee80211_key *key,
 | 
					static void __ieee80211_key_destroy(struct ieee80211_key *key,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ void mac802154_llsec_destroy(struct mac802154_llsec *sec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		msl = container_of(sl, struct mac802154_llsec_seclevel, level);
 | 
							msl = container_of(sl, struct mac802154_llsec_seclevel, level);
 | 
				
			||||||
		list_del(&sl->list);
 | 
							list_del(&sl->list);
 | 
				
			||||||
		kzfree(msl);
 | 
							kfree_sensitive(msl);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list_for_each_entry_safe(dev, dn, &sec->table.devices, list) {
 | 
						list_for_each_entry_safe(dev, dn, &sec->table.devices, list) {
 | 
				
			||||||
| 
						 | 
					@ -66,7 +66,7 @@ void mac802154_llsec_destroy(struct mac802154_llsec *sec)
 | 
				
			||||||
		mkey = container_of(key->key, struct mac802154_llsec_key, key);
 | 
							mkey = container_of(key->key, struct mac802154_llsec_key, key);
 | 
				
			||||||
		list_del(&key->list);
 | 
							list_del(&key->list);
 | 
				
			||||||
		llsec_key_put(mkey);
 | 
							llsec_key_put(mkey);
 | 
				
			||||||
		kzfree(key);
 | 
							kfree_sensitive(key);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -155,7 +155,7 @@ llsec_key_alloc(const struct ieee802154_llsec_key *template)
 | 
				
			||||||
		if (key->tfm[i])
 | 
							if (key->tfm[i])
 | 
				
			||||||
			crypto_free_aead(key->tfm[i]);
 | 
								crypto_free_aead(key->tfm[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(key);
 | 
						kfree_sensitive(key);
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -170,7 +170,7 @@ static void llsec_key_release(struct kref *ref)
 | 
				
			||||||
		crypto_free_aead(key->tfm[i]);
 | 
							crypto_free_aead(key->tfm[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crypto_free_sync_skcipher(key->tfm0);
 | 
						crypto_free_sync_skcipher(key->tfm0);
 | 
				
			||||||
	kzfree(key);
 | 
						kfree_sensitive(key);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct mac802154_llsec_key*
 | 
					static struct mac802154_llsec_key*
 | 
				
			||||||
| 
						 | 
					@ -261,7 +261,7 @@ int mac802154_llsec_key_add(struct mac802154_llsec *sec,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
	kzfree(new);
 | 
						kfree_sensitive(new);
 | 
				
			||||||
	return -ENOMEM;
 | 
						return -ENOMEM;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -341,10 +341,10 @@ static void llsec_dev_free(struct mac802154_llsec_device *dev)
 | 
				
			||||||
				      devkey);
 | 
									      devkey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		list_del(&pos->list);
 | 
							list_del(&pos->list);
 | 
				
			||||||
		kzfree(devkey);
 | 
							kfree_sensitive(devkey);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(dev);
 | 
						kfree_sensitive(dev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int mac802154_llsec_dev_add(struct mac802154_llsec *sec,
 | 
					int mac802154_llsec_dev_add(struct mac802154_llsec *sec,
 | 
				
			||||||
| 
						 | 
					@ -682,7 +682,7 @@ llsec_do_encrypt_auth(struct sk_buff *skb, const struct mac802154_llsec *sec,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = crypto_aead_encrypt(req);
 | 
						rc = crypto_aead_encrypt(req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -886,7 +886,7 @@ llsec_do_decrypt_auth(struct sk_buff *skb, const struct mac802154_llsec *sec,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = crypto_aead_decrypt(req);
 | 
						rc = crypto_aead_decrypt(req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(req);
 | 
						kfree_sensitive(req);
 | 
				
			||||||
	skb_trim(skb, skb->len - authlen);
 | 
						skb_trim(skb, skb->len - authlen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
| 
						 | 
					@ -926,7 +926,7 @@ llsec_update_devkey_record(struct mac802154_llsec_device *dev,
 | 
				
			||||||
		if (!devkey)
 | 
							if (!devkey)
 | 
				
			||||||
			list_add_rcu(&next->devkey.list, &dev->dev.keys);
 | 
								list_add_rcu(&next->devkey.list, &dev->dev.keys);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			kzfree(next);
 | 
								kfree_sensitive(next);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		spin_unlock_bh(&dev->lock);
 | 
							spin_unlock_bh(&dev->lock);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ void sctp_auth_key_put(struct sctp_auth_bytes *key)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (refcount_dec_and_test(&key->refcnt)) {
 | 
						if (refcount_dec_and_test(&key->refcnt)) {
 | 
				
			||||||
		kzfree(key);
 | 
							kfree_sensitive(key);
 | 
				
			||||||
		SCTP_DBG_OBJCNT_DEC(keys);
 | 
							SCTP_DBG_OBJCNT_DEC(keys);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1003,7 +1003,7 @@ krb5_rc4_setup_seq_key(struct krb5_ctx *kctx,
 | 
				
			||||||
	err = 0;
 | 
						err = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out_err:
 | 
					out_err:
 | 
				
			||||||
	kzfree(desc);
 | 
						kfree_sensitive(desc);
 | 
				
			||||||
	crypto_free_shash(hmac);
 | 
						crypto_free_shash(hmac);
 | 
				
			||||||
	dprintk("%s: returning %d\n", __func__, err);
 | 
						dprintk("%s: returning %d\n", __func__, err);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
| 
						 | 
					@ -1079,7 +1079,7 @@ krb5_rc4_setup_enc_key(struct krb5_ctx *kctx,
 | 
				
			||||||
	err = 0;
 | 
						err = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out_err:
 | 
					out_err:
 | 
				
			||||||
	kzfree(desc);
 | 
						kfree_sensitive(desc);
 | 
				
			||||||
	crypto_free_shash(hmac);
 | 
						crypto_free_shash(hmac);
 | 
				
			||||||
	dprintk("%s: returning %d\n", __func__, err);
 | 
						dprintk("%s: returning %d\n", __func__, err);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -228,11 +228,11 @@ u32 krb5_derive_key(const struct gss_krb5_enctype *gk5e,
 | 
				
			||||||
	ret = 0;
 | 
						ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
err_free_raw:
 | 
					err_free_raw:
 | 
				
			||||||
	kzfree(rawkey);
 | 
						kfree_sensitive(rawkey);
 | 
				
			||||||
err_free_out:
 | 
					err_free_out:
 | 
				
			||||||
	kzfree(outblockdata);
 | 
						kfree_sensitive(outblockdata);
 | 
				
			||||||
err_free_in:
 | 
					err_free_in:
 | 
				
			||||||
	kzfree(inblockdata);
 | 
						kfree_sensitive(inblockdata);
 | 
				
			||||||
err_free_cipher:
 | 
					err_free_cipher:
 | 
				
			||||||
	crypto_free_sync_skcipher(cipher);
 | 
						crypto_free_sync_skcipher(cipher);
 | 
				
			||||||
err_return:
 | 
					err_return:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -443,7 +443,7 @@ context_derive_keys_rc4(struct krb5_ctx *ctx)
 | 
				
			||||||
	desc->tfm = hmac;
 | 
						desc->tfm = hmac;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = crypto_shash_digest(desc, sigkeyconstant, slen, ctx->cksum);
 | 
						err = crypto_shash_digest(desc, sigkeyconstant, slen, ctx->cksum);
 | 
				
			||||||
	kzfree(desc);
 | 
						kfree_sensitive(desc);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		goto out_err_free_hmac;
 | 
							goto out_err_free_hmac;
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -441,7 +441,7 @@ static int tipc_aead_init(struct tipc_aead **aead, struct tipc_aead_key *ukey,
 | 
				
			||||||
	/* Allocate per-cpu TFM entry pointer */
 | 
						/* Allocate per-cpu TFM entry pointer */
 | 
				
			||||||
	tmp->tfm_entry = alloc_percpu(struct tipc_tfm *);
 | 
						tmp->tfm_entry = alloc_percpu(struct tipc_tfm *);
 | 
				
			||||||
	if (!tmp->tfm_entry) {
 | 
						if (!tmp->tfm_entry) {
 | 
				
			||||||
		kzfree(tmp);
 | 
							kfree_sensitive(tmp);
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -491,7 +491,7 @@ static int tipc_aead_init(struct tipc_aead **aead, struct tipc_aead_key *ukey,
 | 
				
			||||||
	/* Not any TFM is allocated? */
 | 
						/* Not any TFM is allocated? */
 | 
				
			||||||
	if (!tfm_cnt) {
 | 
						if (!tfm_cnt) {
 | 
				
			||||||
		free_percpu(tmp->tfm_entry);
 | 
							free_percpu(tmp->tfm_entry);
 | 
				
			||||||
		kzfree(tmp);
 | 
							kfree_sensitive(tmp);
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -545,7 +545,7 @@ static int tipc_aead_clone(struct tipc_aead **dst, struct tipc_aead *src)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	aead->tfm_entry = alloc_percpu_gfp(struct tipc_tfm *, GFP_ATOMIC);
 | 
						aead->tfm_entry = alloc_percpu_gfp(struct tipc_tfm *, GFP_ATOMIC);
 | 
				
			||||||
	if (unlikely(!aead->tfm_entry)) {
 | 
						if (unlikely(!aead->tfm_entry)) {
 | 
				
			||||||
		kzfree(aead);
 | 
							kfree_sensitive(aead);
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1352,7 +1352,7 @@ int tipc_crypto_start(struct tipc_crypto **crypto, struct net *net,
 | 
				
			||||||
	/* Allocate statistic structure */
 | 
						/* Allocate statistic structure */
 | 
				
			||||||
	c->stats = alloc_percpu_gfp(struct tipc_crypto_stats, GFP_ATOMIC);
 | 
						c->stats = alloc_percpu_gfp(struct tipc_crypto_stats, GFP_ATOMIC);
 | 
				
			||||||
	if (!c->stats) {
 | 
						if (!c->stats) {
 | 
				
			||||||
		kzfree(c);
 | 
							kfree_sensitive(c);
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1408,7 +1408,7 @@ void tipc_crypto_stop(struct tipc_crypto **crypto)
 | 
				
			||||||
	free_percpu(c->stats);
 | 
						free_percpu(c->stats);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*crypto = NULL;
 | 
						*crypto = NULL;
 | 
				
			||||||
	kzfree(c);
 | 
						kfree_sensitive(c);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void tipc_crypto_timeout(struct tipc_crypto *rx)
 | 
					void tipc_crypto_timeout(struct tipc_crypto *rx)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1125,7 +1125,7 @@ static void __cfg80211_unregister_wdev(struct wireless_dev *wdev, bool sync)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_CFG80211_WEXT
 | 
					#ifdef CONFIG_CFG80211_WEXT
 | 
				
			||||||
	kzfree(wdev->wext.keys);
 | 
						kfree_sensitive(wdev->wext.keys);
 | 
				
			||||||
	wdev->wext.keys = NULL;
 | 
						wdev->wext.keys = NULL;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	/* only initialized if we have a netdev */
 | 
						/* only initialized if we have a netdev */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,7 +127,7 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (WARN_ON(wdev->connect_keys))
 | 
						if (WARN_ON(wdev->connect_keys))
 | 
				
			||||||
		kzfree(wdev->connect_keys);
 | 
							kfree_sensitive(wdev->connect_keys);
 | 
				
			||||||
	wdev->connect_keys = connkeys;
 | 
						wdev->connect_keys = connkeys;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wdev->ibss_fixed = params->channel_fixed;
 | 
						wdev->ibss_fixed = params->channel_fixed;
 | 
				
			||||||
| 
						 | 
					@ -161,7 +161,7 @@ static void __cfg80211_clear_ibss(struct net_device *dev, bool nowext)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ASSERT_WDEV_LOCK(wdev);
 | 
						ASSERT_WDEV_LOCK(wdev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(wdev->connect_keys);
 | 
						kfree_sensitive(wdev->connect_keys);
 | 
				
			||||||
	wdev->connect_keys = NULL;
 | 
						wdev->connect_keys = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rdev_set_qos_map(rdev, dev, NULL);
 | 
						rdev_set_qos_map(rdev, dev, NULL);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -131,7 +131,7 @@ static void lib80211_tkip_deinit(void *priv)
 | 
				
			||||||
		crypto_free_shash(_priv->tx_tfm_michael);
 | 
							crypto_free_shash(_priv->tx_tfm_michael);
 | 
				
			||||||
		crypto_free_shash(_priv->rx_tfm_michael);
 | 
							crypto_free_shash(_priv->rx_tfm_michael);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	kzfree(priv);
 | 
						kfree_sensitive(priv);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline u16 RotR1(u16 val)
 | 
					static inline u16 RotR1(u16 val)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ static void *lib80211_wep_init(int keyidx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void lib80211_wep_deinit(void *priv)
 | 
					static void lib80211_wep_deinit(void *priv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	kzfree(priv);
 | 
						kfree_sensitive(priv);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Add WEP IV/key info to a frame that has at least 4 bytes of headroom */
 | 
					/* Add WEP IV/key info to a frame that has at least 4 bytes of headroom */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9836,7 +9836,7 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((ibss.chandef.width != NL80211_CHAN_WIDTH_20_NOHT) &&
 | 
							if ((ibss.chandef.width != NL80211_CHAN_WIDTH_20_NOHT) &&
 | 
				
			||||||
		    no_ht) {
 | 
							    no_ht) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -9848,7 +9848,7 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
		int r = validate_pae_over_nl80211(rdev, info);
 | 
							int r = validate_pae_over_nl80211(rdev, info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (r < 0) {
 | 
							if (r < 0) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			return r;
 | 
								return r;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9861,7 +9861,7 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
	wdev_lock(dev->ieee80211_ptr);
 | 
						wdev_lock(dev->ieee80211_ptr);
 | 
				
			||||||
	err = __cfg80211_join_ibss(rdev, dev, &ibss, connkeys);
 | 
						err = __cfg80211_join_ibss(rdev, dev, &ibss, connkeys);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		kzfree(connkeys);
 | 
							kfree_sensitive(connkeys);
 | 
				
			||||||
	else if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
 | 
						else if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
 | 
				
			||||||
		dev->ieee80211_ptr->conn_owner_nlportid = info->snd_portid;
 | 
							dev->ieee80211_ptr->conn_owner_nlportid = info->snd_portid;
 | 
				
			||||||
	wdev_unlock(dev->ieee80211_ptr);
 | 
						wdev_unlock(dev->ieee80211_ptr);
 | 
				
			||||||
| 
						 | 
					@ -10289,7 +10289,7 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
 | 
						if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
 | 
				
			||||||
		if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) {
 | 
							if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		memcpy(&connect.ht_capa,
 | 
							memcpy(&connect.ht_capa,
 | 
				
			||||||
| 
						 | 
					@ -10307,7 +10307,7 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) {
 | 
						if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) {
 | 
				
			||||||
		if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) {
 | 
							if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		memcpy(&connect.vht_capa,
 | 
							memcpy(&connect.vht_capa,
 | 
				
			||||||
| 
						 | 
					@ -10321,7 +10321,7 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
		       (rdev->wiphy.features & NL80211_FEATURE_QUIET)) &&
 | 
							       (rdev->wiphy.features & NL80211_FEATURE_QUIET)) &&
 | 
				
			||||||
		    !wiphy_ext_feature_isset(&rdev->wiphy,
 | 
							    !wiphy_ext_feature_isset(&rdev->wiphy,
 | 
				
			||||||
					     NL80211_EXT_FEATURE_RRM)) {
 | 
										     NL80211_EXT_FEATURE_RRM)) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		connect.flags |= ASSOC_REQ_USE_RRM;
 | 
							connect.flags |= ASSOC_REQ_USE_RRM;
 | 
				
			||||||
| 
						 | 
					@ -10329,21 +10329,21 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	connect.pbss = nla_get_flag(info->attrs[NL80211_ATTR_PBSS]);
 | 
						connect.pbss = nla_get_flag(info->attrs[NL80211_ATTR_PBSS]);
 | 
				
			||||||
	if (connect.pbss && !rdev->wiphy.bands[NL80211_BAND_60GHZ]) {
 | 
						if (connect.pbss && !rdev->wiphy.bands[NL80211_BAND_60GHZ]) {
 | 
				
			||||||
		kzfree(connkeys);
 | 
							kfree_sensitive(connkeys);
 | 
				
			||||||
		return -EOPNOTSUPP;
 | 
							return -EOPNOTSUPP;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (info->attrs[NL80211_ATTR_BSS_SELECT]) {
 | 
						if (info->attrs[NL80211_ATTR_BSS_SELECT]) {
 | 
				
			||||||
		/* bss selection makes no sense if bssid is set */
 | 
							/* bss selection makes no sense if bssid is set */
 | 
				
			||||||
		if (connect.bssid) {
 | 
							if (connect.bssid) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = parse_bss_select(info->attrs[NL80211_ATTR_BSS_SELECT],
 | 
							err = parse_bss_select(info->attrs[NL80211_ATTR_BSS_SELECT],
 | 
				
			||||||
				       wiphy, &connect.bss_select);
 | 
									       wiphy, &connect.bss_select);
 | 
				
			||||||
		if (err) {
 | 
							if (err) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			return err;
 | 
								return err;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -10373,13 +10373,13 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
		   info->attrs[NL80211_ATTR_FILS_ERP_REALM] ||
 | 
							   info->attrs[NL80211_ATTR_FILS_ERP_REALM] ||
 | 
				
			||||||
		   info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] ||
 | 
							   info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] ||
 | 
				
			||||||
		   info->attrs[NL80211_ATTR_FILS_ERP_RRK]) {
 | 
							   info->attrs[NL80211_ATTR_FILS_ERP_RRK]) {
 | 
				
			||||||
		kzfree(connkeys);
 | 
							kfree_sensitive(connkeys);
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (nla_get_flag(info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])) {
 | 
						if (nla_get_flag(info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])) {
 | 
				
			||||||
		if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
 | 
							if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
 | 
				
			||||||
			kzfree(connkeys);
 | 
								kfree_sensitive(connkeys);
 | 
				
			||||||
			GENL_SET_ERR_MSG(info,
 | 
								GENL_SET_ERR_MSG(info,
 | 
				
			||||||
					 "external auth requires connection ownership");
 | 
										 "external auth requires connection ownership");
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
| 
						 | 
					@ -10392,7 +10392,7 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
 | 
				
			||||||
	err = cfg80211_connect(rdev, dev, &connect, connkeys,
 | 
						err = cfg80211_connect(rdev, dev, &connect, connkeys,
 | 
				
			||||||
			       connect.prev_bssid);
 | 
								       connect.prev_bssid);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		kzfree(connkeys);
 | 
							kfree_sensitive(connkeys);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
 | 
						if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
 | 
				
			||||||
		dev->ieee80211_ptr->conn_owner_nlportid = info->snd_portid;
 | 
							dev->ieee80211_ptr->conn_owner_nlportid = info->snd_portid;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -742,7 +742,7 @@ void __cfg80211_connect_result(struct net_device *dev,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cr->status != WLAN_STATUS_SUCCESS) {
 | 
						if (cr->status != WLAN_STATUS_SUCCESS) {
 | 
				
			||||||
		kzfree(wdev->connect_keys);
 | 
							kfree_sensitive(wdev->connect_keys);
 | 
				
			||||||
		wdev->connect_keys = NULL;
 | 
							wdev->connect_keys = NULL;
 | 
				
			||||||
		wdev->ssid_len = 0;
 | 
							wdev->ssid_len = 0;
 | 
				
			||||||
		wdev->conn_owner_nlportid = 0;
 | 
							wdev->conn_owner_nlportid = 0;
 | 
				
			||||||
| 
						 | 
					@ -1098,7 +1098,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
 | 
				
			||||||
	wdev->current_bss = NULL;
 | 
						wdev->current_bss = NULL;
 | 
				
			||||||
	wdev->ssid_len = 0;
 | 
						wdev->ssid_len = 0;
 | 
				
			||||||
	wdev->conn_owner_nlportid = 0;
 | 
						wdev->conn_owner_nlportid = 0;
 | 
				
			||||||
	kzfree(wdev->connect_keys);
 | 
						kfree_sensitive(wdev->connect_keys);
 | 
				
			||||||
	wdev->connect_keys = NULL;
 | 
						wdev->connect_keys = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	nl80211_send_disconnected(rdev, dev, reason, ie, ie_len, from_ap);
 | 
						nl80211_send_disconnected(rdev, dev, reason, ie, ie_len, from_ap);
 | 
				
			||||||
| 
						 | 
					@ -1281,7 +1281,7 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ASSERT_WDEV_LOCK(wdev);
 | 
						ASSERT_WDEV_LOCK(wdev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(wdev->connect_keys);
 | 
						kfree_sensitive(wdev->connect_keys);
 | 
				
			||||||
	wdev->connect_keys = NULL;
 | 
						wdev->connect_keys = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wdev->conn_owner_nlportid = 0;
 | 
						wdev->conn_owner_nlportid = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -871,7 +871,7 @@ void cfg80211_upload_connect_keys(struct wireless_dev *wdev)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kzfree(wdev->connect_keys);
 | 
						kfree_sensitive(wdev->connect_keys);
 | 
				
			||||||
	wdev->connect_keys = NULL;
 | 
						wdev->connect_keys = NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev,
 | 
				
			||||||
	err = cfg80211_connect(rdev, wdev->netdev,
 | 
						err = cfg80211_connect(rdev, wdev->netdev,
 | 
				
			||||||
			       &wdev->wext.connect, ck, prev_bssid);
 | 
								       &wdev->wext.connect, ck, prev_bssid);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		kzfree(ck);
 | 
							kfree_sensitive(ck);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue