Commit 962ddc5a authored by Eric Biggers's avatar Eric Biggers Committed by Herbert Xu
Browse files

crypto: acomp - Fix CFI failure due to type punning



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: 42d9f6c7 ("crypto: acomp - Move scomp stream allocation code into acomp")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarEric Biggers <ebiggers@kernel.org>
Reviewed-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 3d9eb180
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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,
+6 −1
Original line number Diff line number Diff line
@@ -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)
+1 −4
Original line number Diff line number Diff line
@@ -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 *);
	};

	struct crypto_acomp_stream __percpu *streams;
	struct work_struct stream_work;