forked from mirrors/linux
		
	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
	
	 Waiman Long
						Waiman Long