From: Herbert Xu Date: Mon, 26 May 2025 08:56:46 +0000 (+0800) Subject: crypto: shash - Fix buffer overrun in import function X-Git-Tag: v6.16-rc1~135^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a84874c7e7dde5cdddc80a82093120e924a348b;p=thirdparty%2Flinux.git crypto: shash - Fix buffer overrun in import function Only set the partial block length to zero if the algorithm is block-only. Otherwise the descriptor context could be empty, e.g., for digest_null. Reported-by: syzbot+4851c19615d35f0e4d68@syzkaller.appspotmail.com Fixes: 7650f826f7b2 ("crypto: shash - Handle partial blocks in API") Signed-off-by: Herbert Xu --- diff --git a/crypto/shash.c b/crypto/shash.c index 37537d7995c7b..4721f5f134f4d 100644 --- a/crypto/shash.c +++ b/crypto/shash.c @@ -257,12 +257,13 @@ static int __crypto_shash_import(struct shash_desc *desc, const void *in, if (crypto_shash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) return -ENOKEY; - plen = crypto_shash_blocksize(tfm) + 1; - descsize = crypto_shash_descsize(tfm); ss = crypto_shash_statesize(tfm); - buf[descsize - 1] = 0; - if (crypto_shash_block_only(tfm)) + if (crypto_shash_block_only(tfm)) { + plen = crypto_shash_blocksize(tfm) + 1; ss -= plen; + descsize = crypto_shash_descsize(tfm); + buf[descsize - 1] = 0; + } if (!import) { memcpy(buf, in, ss); return 0;