]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
crypto: krb5enc - fix async decrypt skipping hash verification
authorDudu Lu <phx0fer@gmail.com>
Mon, 20 Apr 2026 04:40:27 +0000 (12:40 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 20 Apr 2026 08:18:58 +0000 (16:18 +0800)
commit3bfbf5f0a99c991769ec562721285df7ab69240b
tree08872591a309687d9ba7075ab8a9b913e70cd71e
parent5aa58c3a572b3e3b6c786953339f7978b845cc52
crypto: krb5enc - fix async decrypt skipping hash verification

krb5enc_dispatch_decrypt() sets req->base.complete as the skcipher
callback, which is the caller's own completion handler. When the
skcipher completes asynchronously, this signals "done" to the caller
without executing krb5enc_dispatch_decrypt_hash(), completely bypassing
the integrity verification (hash check).

Compare with the encrypt path which correctly uses
krb5enc_encrypt_done as an intermediate callback to chain into the
hash computation on async completion.

Fix by adding krb5enc_decrypt_done as an intermediate callback that
chains into krb5enc_dispatch_decrypt_hash() upon async skcipher
completion, matching the encrypt path's callback pattern.

Also fix EBUSY/EINPROGRESS handling throughout: remove
krb5enc_request_complete() which incorrectly swallowed EINPROGRESS
notifications that must be passed up to callers waiting on backlogged
requests, and add missing EBUSY checks in krb5enc_encrypt_ahash_done
for the dispatch_encrypt return value.

Fixes: d1775a177f7f ("crypto: Add 'krb5enc' hash and cipher AEAD algorithm")
Signed-off-by: Dudu Lu <phx0fer@gmail.com>
Unset MAY_BACKLOG on the async completion path so the user won't
see back-to-back EINPROGRESS notifications.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/krb5enc.c