Hello, This series makes all crypto templates initialize their spawns (i.e. their "inner algorithms") in a consistent way, using a consistent set of crypto_grab_*() helper functions. skcipher, aead, and akcipher spawns already used this approach, but shash, ahash, and cipher spawns were being initialized differently -- causing confusion and unnecessary code. As long as it's introducing new crypto_grab_*() functions, this series also takes the opportunity to first improve the existing ones to take the instance pointer as a parameter, so that all callers don't have to store it temporarily to crypto_spawn::inst. Finally, this series also makes two changes that allow simplifying the error handling in template ->create() functions: (1) crypto_drop_spawn() is made a no-op on uninitialized instances, and (2) crypto_grab_spawn() is made to handle an ERR_PTR() name. Taking advantage of these two changes, this series also simplifies the error handling in the template ->create() functions which were being updated anyway to use a new crypto_grab_*() function. But to keep this series manageable, simplifying error handling in the remaining templates is left for later. This series is an internal cleanup only; there are no changes for users of the crypto API. I've tested that all the templates still get instantiated correctly and that errors seem to be handled properly. Eric Biggers (28): crypto: algapi - make crypto_drop_spawn() a no-op on uninitialized spawns crypto: algapi - make crypto_grab_spawn() handle an ERR_PTR() name crypto: shash - make struct shash_instance be the full size crypto: ahash - make struct ahash_instance be the full size crypto: skcipher - pass instance to crypto_grab_skcipher() crypto: aead - pass instance to crypto_grab_aead() crypto: akcipher - pass instance to crypto_grab_akcipher() crypto: algapi - pass instance to crypto_grab_spawn() crypto: shash - introduce crypto_grab_shash() crypto: ahash - introduce crypto_grab_ahash() crypto: cipher - introduce crypto_cipher_spawn and crypto_grab_cipher() crypto: adiantum - use crypto_grab_{cipher,shash} and simplify error paths crypto: cryptd - use crypto_grab_shash() and simplify error paths crypto: hmac - use crypto_grab_shash() and simplify error paths crypto: authenc - use crypto_grab_ahash() and simplify error paths crypto: authencesn - use crypto_grab_ahash() and simplify error paths crypto: gcm - use crypto_grab_ahash() and simplify error paths crypto: ccm - use crypto_grab_ahash() and simplify error paths crypto: chacha20poly1305 - use crypto_grab_ahash() and simplify error paths crypto: skcipher - use crypto_grab_cipher() and simplify error paths crypto: cbcmac - use crypto_grab_cipher() and simplify error paths crypto: cmac - use crypto_grab_cipher() and simplify error paths crypto: vmac - use crypto_grab_cipher() and simplify error paths crypto: xcbc - use crypto_grab_cipher() and simplify error paths crypto: cipher - make crypto_spawn_cipher() take a crypto_cipher_spawn crypto: algapi - remove obsoleted instance creation helpers crypto: ahash - unexport crypto_ahash_type crypto: algapi - fold crypto_init_spawn() into crypto_grab_spawn() crypto/adiantum.c | 87 +++++++---------------- crypto/aead.c | 7 +- crypto/ahash.c | 39 ++++------- crypto/akcipher.c | 7 +- crypto/algapi.c | 99 +++++--------------------- crypto/authenc.c | 57 +++++---------- crypto/authencesn.c | 57 +++++---------- crypto/ccm.c | 107 +++++++++++------------------ crypto/chacha20poly1305.c | 88 ++++++++---------------- crypto/cipher.c | 11 +++ crypto/cmac.c | 38 +++++----- crypto/cryptd.c | 76 ++++++-------------- crypto/ctr.c | 4 +- crypto/cts.c | 9 +-- crypto/essiv.c | 16 ++--- crypto/gcm.c | 76 ++++++++------------ crypto/geniv.c | 4 +- crypto/hmac.c | 36 +++++----- crypto/lrw.c | 15 ++-- crypto/pcrypt.c | 5 +- crypto/rsa-pkcs1pad.c | 8 ++- crypto/shash.c | 28 +++----- crypto/skcipher.c | 41 +++++------ crypto/vmac.c | 38 +++++----- crypto/xcbc.c | 43 +++++------- crypto/xts.c | 9 +-- include/crypto/algapi.h | 58 +++++++--------- include/crypto/internal/aead.h | 11 +-- include/crypto/internal/akcipher.h | 12 +--- include/crypto/internal/hash.h | 70 +++++++++---------- include/crypto/internal/skcipher.h | 11 +-- 31 files changed, 423 insertions(+), 744 deletions(-) -- 2.24.1