Commit f75f6668 authored by Dan Moulding's avatar Dan Moulding Committed by Herbert Xu
Browse files

crypto: comp - Use same definition of context alloc and free ops



In commit 42d9f6c7 ("crypto: acomp - Move scomp stream allocation
code into acomp"), the crypto_acomp_streams struct was made to rely on
having the alloc_ctx and free_ctx operations defined in the same order
as the scomp_alg struct. But in that same commit, the alloc_ctx and
free_ctx members of scomp_alg may be randomized by structure layout
randomization, since they are contained in a pure ops structure
(containing only function pointers). If the pointers within scomp_alg
are randomized, but those in crypto_acomp_streams are not, then
the order may no longer match. This fixes the problem by removing the
union from scomp_alg so that both crypto_acomp_streams and scomp_alg
will share the same definition of alloc_ctx and free_ctx, ensuring
they will always have the same layout.

Signed-off-by: default avatarDan Moulding <dan@danm.net>
Suggested-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Fixes: 42d9f6c7 ("crypto: acomp - Move scomp stream allocation code into acomp")
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 381e8ee3
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -54,8 +54,10 @@ static int crypto842_sdecompress(struct crypto_scomp *tfm,
}

static struct scomp_alg scomp = {
	.streams		= {
		.alloc_ctx	= crypto842_alloc_ctx,
		.free_ctx	= crypto842_free_ctx,
	},
	.compress		= crypto842_scompress,
	.decompress		= crypto842_sdecompress,
	.base			= {
+4 −2
Original line number Diff line number Diff line
@@ -68,8 +68,10 @@ static int lz4_sdecompress(struct crypto_scomp *tfm, const u8 *src,
}

static struct scomp_alg scomp = {
	.streams		= {
		.alloc_ctx	= lz4_alloc_ctx,
		.free_ctx	= lz4_free_ctx,
	},
	.compress		= lz4_scompress,
	.decompress		= lz4_sdecompress,
	.base			= {
+4 −2
Original line number Diff line number Diff line
@@ -66,8 +66,10 @@ static int lz4hc_sdecompress(struct crypto_scomp *tfm, const u8 *src,
}

static struct scomp_alg scomp = {
	.streams		= {
		.alloc_ctx	= lz4hc_alloc_ctx,
		.free_ctx	= lz4hc_free_ctx,
	},
	.compress		= lz4hc_scompress,
	.decompress		= lz4hc_sdecompress,
	.base			= {
+4 −2
Original line number Diff line number Diff line
@@ -70,8 +70,10 @@ static int lzorle_sdecompress(struct crypto_scomp *tfm, const u8 *src,
}

static struct scomp_alg scomp = {
	.streams		= {
		.alloc_ctx	= lzorle_alloc_ctx,
		.free_ctx	= lzorle_free_ctx,
	},
	.compress		= lzorle_scompress,
	.decompress		= lzorle_sdecompress,
	.base			= {
+4 −2
Original line number Diff line number Diff line
@@ -70,8 +70,10 @@ static int lzo_sdecompress(struct crypto_scomp *tfm, const u8 *src,
}

static struct scomp_alg scomp = {
	.streams		= {
		.alloc_ctx	= lzo_alloc_ctx,
		.free_ctx	= lzo_free_ctx,
	},
	.compress		= lzo_scompress,
	.decompress		= lzo_sdecompress,
	.base			= {
Loading