Hi Sasha,
On Thu, Aug 21, 2025 at 03:21:31PM -0400, Sasha Levin wrote:
From: Eric Biggers ebiggers@kernel.org
[ Upstream commit 962ddc5a7a4b04c007bba0f3e7298cda13c62efd ]
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: 42d9f6c77479 ("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 Signed-off-by: Sasha Levin sashal@kernel.org
crypto/deflate.c | 7 ++++++- crypto/zstd.c | 7 ++++++- include/crypto/internal/acompress.h | 5 +---- 3 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/crypto/deflate.c b/crypto/deflate.c index fe8e4ad0fee1..21404515dc77 100644 --- a/crypto/deflate.c +++ b/crypto/deflate.c @@ -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,
Wouldn't it be simpler to drop the below changes to crypto/zstd.c in this patch and avoid backporting commit f5ad93ffb541 ("crypto: zstd - convert to acomp") to stable?
f5ad93ffb541 appears to be more of a feature than a fix, and there are related follow-up changes that aren't marked with a Fixes tag:
03ba056e63d3 ("crypto: zstd - fix duplicate check warning") 25f4e1d7193d ("crypto: zstd - replace zero-length array with flexible array member")
Eric, Herbert, what's your take?
diff --git a/crypto/zstd.c b/crypto/zstd.c index 657e0cf7b952..ff5f596a4ea7 100644 --- a/crypto/zstd.c +++ b/crypto/zstd.c @@ -54,9 +54,14 @@ static void *zstd_alloc_stream(void) return ctx; } +static void zstd_free_stream(void *ctx) +{
- kvfree(ctx);
+}
static struct crypto_acomp_streams zstd_streams = { .alloc_ctx = zstd_alloc_stream,
- .cfree_ctx = kvfree,
- .free_ctx = zstd_free_stream,
}; static int zstd_init(struct crypto_acomp *acomp_tfm) diff --git a/include/crypto/internal/acompress.h b/include/crypto/internal/acompress.h index ffffd88bbbad..2d97440028ff 100644 --- a/include/crypto/internal/acompress.h +++ b/include/crypto/internal/acompress.h @@ -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;
Regards,