mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	crypto: adiantum - initialize crypto_spawn::inst
crypto_grab_*() doesn't set crypto_spawn::inst, so templates must set it
beforehand.  Otherwise it will be left NULL, which causes a crash in
certain cases where algorithms are dynamically loaded/unloaded.  E.g.
with CONFIG_CRYPTO_CHACHA20_X86_64=m, the following caused a crash:
    insmod chacha-x86_64.ko
    python -c 'import socket; socket.socket(socket.AF_ALG, 5, 0).bind(("skcipher", "adiantum(xchacha12,aes)"))'
    rmmod chacha-x86_64.ko
    python -c 'import socket; socket.socket(socket.AF_ALG, 5, 0).bind(("skcipher", "adiantum(xchacha12,aes)"))'
Fixes: 059c2a4d8e ("crypto: adiantum - add Adiantum support")
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
			
			
This commit is contained in:
		
							parent
							
								
									06bbf75347
								
							
						
					
					
						commit
						6db4341017
					
				
					 1 changed files with 4 additions and 0 deletions
				
			
		| 
						 | 
					@ -539,6 +539,8 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
 | 
				
			||||||
	ictx = skcipher_instance_ctx(inst);
 | 
						ictx = skcipher_instance_ctx(inst);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Stream cipher, e.g. "xchacha12" */
 | 
						/* Stream cipher, e.g. "xchacha12" */
 | 
				
			||||||
 | 
						crypto_set_skcipher_spawn(&ictx->streamcipher_spawn,
 | 
				
			||||||
 | 
									  skcipher_crypto_instance(inst));
 | 
				
			||||||
	err = crypto_grab_skcipher(&ictx->streamcipher_spawn, streamcipher_name,
 | 
						err = crypto_grab_skcipher(&ictx->streamcipher_spawn, streamcipher_name,
 | 
				
			||||||
				   0, crypto_requires_sync(algt->type,
 | 
									   0, crypto_requires_sync(algt->type,
 | 
				
			||||||
							   algt->mask));
 | 
												   algt->mask));
 | 
				
			||||||
| 
						 | 
					@ -547,6 +549,8 @@ static int adiantum_create(struct crypto_template *tmpl, struct rtattr **tb)
 | 
				
			||||||
	streamcipher_alg = crypto_spawn_skcipher_alg(&ictx->streamcipher_spawn);
 | 
						streamcipher_alg = crypto_spawn_skcipher_alg(&ictx->streamcipher_spawn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Block cipher, e.g. "aes" */
 | 
						/* Block cipher, e.g. "aes" */
 | 
				
			||||||
 | 
						crypto_set_spawn(&ictx->blockcipher_spawn,
 | 
				
			||||||
 | 
								 skcipher_crypto_instance(inst));
 | 
				
			||||||
	err = crypto_grab_spawn(&ictx->blockcipher_spawn, blockcipher_name,
 | 
						err = crypto_grab_spawn(&ictx->blockcipher_spawn, blockcipher_name,
 | 
				
			||||||
				CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK);
 | 
									CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue