Commit 6f7d9481 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Eric Biggers
Browse files

crypto/arm64: sm4/xts - Merge ksimd scopes to reduce stack bloat



Merge the two ksimd scopes in the implementation of SM4-XTS to prevent
stack bloat in cases where the compiler fails to combine the stack slots
for the kernel mode FP/SIMD buffers.

Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Tested-by: default avatarArnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20251203163803.157541-6-ardb@kernel.org


Signed-off-by: default avatarEric Biggers <ebiggers@kernel.org>
parent a9a8b1a3
Loading
Loading
Loading
Loading
+20 −22
Original line number Diff line number Diff line
@@ -346,11 +346,11 @@ static int sm4_xts_crypt(struct skcipher_request *req, bool encrypt)
		tail = 0;
	}

	scoped_ksimd() {
		while ((nbytes = walk.nbytes) >= SM4_BLOCK_SIZE) {
			if (nbytes < walk.total)
				nbytes &= ~(SM4_BLOCK_SIZE - 1);

		scoped_ksimd() {
			if (encrypt)
				sm4_ce_xts_enc(ctx->key1.rkey_enc, walk.dst.virt.addr,
						walk.src.virt.addr, walk.iv, nbytes,
@@ -359,7 +359,6 @@ static int sm4_xts_crypt(struct skcipher_request *req, bool encrypt)
				sm4_ce_xts_dec(ctx->key1.rkey_dec, walk.dst.virt.addr,
						walk.src.virt.addr, walk.iv, nbytes,
						rkey2_enc);
		}

			rkey2_enc = NULL;

@@ -377,14 +376,13 @@ static int sm4_xts_crypt(struct skcipher_request *req, bool encrypt)
		if (req->dst != req->src)
			dst = scatterwalk_ffwd(sg_dst, req->dst, subreq.cryptlen);

	skcipher_request_set_crypt(&subreq, src, dst, SM4_BLOCK_SIZE + tail,
				   req->iv);
		skcipher_request_set_crypt(&subreq, src, dst,
					   SM4_BLOCK_SIZE + tail, req->iv);

		err = skcipher_walk_virt(&walk, &subreq, false);
		if (err)
			return err;

	scoped_ksimd() {
		if (encrypt)
			sm4_ce_xts_enc(ctx->key1.rkey_enc, walk.dst.virt.addr,
					walk.src.virt.addr, walk.iv, walk.nbytes,