crypto: acomp - Fix CFI failure due to type punning

commit 962ddc5a7a upstream.

To avoid a crash when control flow integrity is enabled, make the
workspace ("stream") free function use a consistent type, and call it
through a function pointer that has that same type.

Fixes: 42d9f6c774 ("crypto: acomp - Move scomp stream allocation code into acomp")
Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
[Giovanni: Backport to 6.16.y. Removed logic in crypto/zstd.c as commit
f5ad93ffb5 ("crypto: zstd - convert to acomp") is not going to be
backported to stable.]
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Eric Biggers 2025-07-08 17:59:54 -07:00 committed by Greg Kroah-Hartman
parent 31eb1b5e3f
commit 7ec68c5946
2 changed files with 7 additions and 5 deletions

View File

@ -48,9 +48,14 @@ static void *deflate_alloc_stream(void)
return ctx;
}
static void deflate_free_stream(void *ctx)
{
kvfree(ctx);
}
static struct crypto_acomp_streams deflate_streams = {
.alloc_ctx = deflate_alloc_stream,
.cfree_ctx = kvfree,
.free_ctx = deflate_free_stream,
};
static int deflate_compress_one(struct acomp_req *req,

View File

@ -63,10 +63,7 @@ struct crypto_acomp_stream {
struct crypto_acomp_streams {
/* These must come first because of struct scomp_alg. */
void *(*alloc_ctx)(void);
union {
void (*free_ctx)(void *);
void (*cfree_ctx)(const void *);
};
void (*free_ctx)(void *);
struct crypto_acomp_stream __percpu *streams;
struct work_struct stream_work;