Commit 81d358b1 authored by Michael Ellerman's avatar Michael Ellerman
Browse files

powerpc/crypto: Fix aes-gcm-p10 link errors



The recently added P10 AES/GCM code added some files containing
CRYPTOGAMS perl-asm code which are near duplicates of the p8 files
found in drivers/crypto/vmx.

In particular the newly added files produce functions with identical
names to the existing code.

When the kernel is built with CONFIG_CRYPTO_AES_GCM_P10=y and
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=y that leads to link errors, eg:

  ld: drivers/crypto/vmx/aesp8-ppc.o: in function `aes_p8_set_encrypt_key':
  (.text+0xa0): multiple definition of `aes_p8_set_encrypt_key'; arch/powerpc/crypto/aesp8-ppc.o:(.text+0xa0): first defined here
  ...
  ld: drivers/crypto/vmx/ghashp8-ppc.o: in function `gcm_ghash_p8':
  (.text+0x140): multiple definition of `gcm_ghash_p8'; arch/powerpc/crypto/ghashp8-ppc.o:(.text+0x2e4): first defined here

Fix it for now by renaming the newly added files and functions to use
"p10" instead of "p8" in the names.

Fixes: 45a4672b ("crypto: p10-aes-gcm - Update Kconfig and Makefile")
Tested-by: default avatarVishal Chourasia <vishalc@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230525150501.37081-1-mpe@ellerman.id.au
parent 358e526a
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -22,15 +22,15 @@ sha1-ppc-spe-y := sha1-spe-asm.o sha1-spe-glue.o
sha256-ppc-spe-y := sha256-spe-asm.o sha256-spe-glue.o
crc32c-vpmsum-y := crc32c-vpmsum_asm.o crc32c-vpmsum_glue.o
crct10dif-vpmsum-y := crct10dif-vpmsum_asm.o crct10dif-vpmsum_glue.o
aes-gcm-p10-crypto-y := aes-gcm-p10-glue.o aes-gcm-p10.o ghashp8-ppc.o aesp8-ppc.o
aes-gcm-p10-crypto-y := aes-gcm-p10-glue.o aes-gcm-p10.o ghashp10-ppc.o aesp10-ppc.o

quiet_cmd_perl = PERL    $@
      cmd_perl = $(PERL) $< $(if $(CONFIG_CPU_LITTLE_ENDIAN), linux-ppc64le, linux-ppc64) > $@

targets += aesp8-ppc.S ghashp8-ppc.S
targets += aesp10-ppc.S ghashp10-ppc.S

$(obj)/aesp8-ppc.S $(obj)/ghashp8-ppc.S: $(obj)/%.S: $(src)/%.pl FORCE
$(obj)/aesp10-ppc.S $(obj)/ghashp10-ppc.S: $(obj)/%.S: $(src)/%.pl FORCE
	$(call if_changed,perl)

OBJECT_FILES_NON_STANDARD_aesp8-ppc.o := y
OBJECT_FILES_NON_STANDARD_ghashp8-ppc.o := y
OBJECT_FILES_NON_STANDARD_aesp10-ppc.o := y
OBJECT_FILES_NON_STANDARD_ghashp10-ppc.o := y
+9 −9
Original line number Diff line number Diff line
@@ -30,15 +30,15 @@ MODULE_AUTHOR("Danny Tsen <dtsen@linux.ibm.com");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS_CRYPTO("aes");

asmlinkage int aes_p8_set_encrypt_key(const u8 *userKey, const int bits,
asmlinkage int aes_p10_set_encrypt_key(const u8 *userKey, const int bits,
				      void *key);
asmlinkage void aes_p8_encrypt(const u8 *in, u8 *out, const void *key);
asmlinkage void aes_p10_encrypt(const u8 *in, u8 *out, const void *key);
asmlinkage void aes_p10_gcm_encrypt(u8 *in, u8 *out, size_t len,
				    void *rkey, u8 *iv, void *Xi);
asmlinkage void aes_p10_gcm_decrypt(u8 *in, u8 *out, size_t len,
				    void *rkey, u8 *iv, void *Xi);
asmlinkage void gcm_init_htable(unsigned char htable[256], unsigned char Xi[16]);
asmlinkage void gcm_ghash_p8(unsigned char *Xi, unsigned char *Htable,
asmlinkage void gcm_ghash_p10(unsigned char *Xi, unsigned char *Htable,
		unsigned char *aad, unsigned int alen);

struct aes_key {
@@ -93,7 +93,7 @@ static void set_aad(struct gcm_ctx *gctx, struct Hash_ctx *hash,
	gctx->aadLen = alen;
	i = alen & ~0xf;
	if (i) {
		gcm_ghash_p8(nXi, hash->Htable+32, aad, i);
		gcm_ghash_p10(nXi, hash->Htable+32, aad, i);
		aad += i;
		alen -= i;
	}
@@ -102,7 +102,7 @@ static void set_aad(struct gcm_ctx *gctx, struct Hash_ctx *hash,
			nXi[i] ^= aad[i];

		memset(gctx->aad_hash, 0, 16);
		gcm_ghash_p8(gctx->aad_hash, hash->Htable+32, nXi, 16);
		gcm_ghash_p10(gctx->aad_hash, hash->Htable+32, nXi, 16);
	} else {
		memcpy(gctx->aad_hash, nXi, 16);
	}
@@ -115,7 +115,7 @@ static void gcmp10_init(struct gcm_ctx *gctx, u8 *iv, unsigned char *rdkey,
{
	__be32 counter = cpu_to_be32(1);

	aes_p8_encrypt(hash->H, hash->H, rdkey);
	aes_p10_encrypt(hash->H, hash->H, rdkey);
	set_subkey(hash->H);
	gcm_init_htable(hash->Htable+32, hash->H);

@@ -126,7 +126,7 @@ static void gcmp10_init(struct gcm_ctx *gctx, u8 *iv, unsigned char *rdkey,
	/*
	 * Encrypt counter vector as iv tag and increment counter.
	 */
	aes_p8_encrypt(iv, gctx->ivtag, rdkey);
	aes_p10_encrypt(iv, gctx->ivtag, rdkey);

	counter = cpu_to_be32(2);
	*((__be32 *)(iv+12)) = counter;
@@ -160,7 +160,7 @@ static void finish_tag(struct gcm_ctx *gctx, struct Hash_ctx *hash, int len)
	/*
	 * hash (AAD len and len)
	 */
	gcm_ghash_p8(hash->Htable, hash->Htable+32, aclen, 16);
	gcm_ghash_p10(hash->Htable, hash->Htable+32, aclen, 16);

	for (i = 0; i < 16; i++)
		hash->Htable[i] ^= gctx->ivtag[i];
@@ -192,7 +192,7 @@ static int p10_aes_gcm_setkey(struct crypto_aead *aead, const u8 *key,
	int ret;

	vsx_begin();
	ret = aes_p8_set_encrypt_key(key, keylen * 8, &ctx->enc_key);
	ret = aes_p10_set_encrypt_key(key, keylen * 8, &ctx->enc_key);
	vsx_end();

	return ret ? -EINVAL : 0;
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ die "can't locate ppc-xlate.pl";
open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";

$FRAME=8*$SIZE_T;
$prefix="aes_p8";
$prefix="aes_p10";

$sp="r1";
$vrsave="r12";
+6 −6
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ $code=<<___;

.text

.globl	.gcm_init_p8
.globl	.gcm_init_p10
	lis		r0,0xfff0
	li		r8,0x10
	mfspr		$vrsave,256
@@ -110,7 +110,7 @@ $code=<<___;
	.long		0
	.byte		0,12,0x14,0,0,0,2,0
	.long		0
.size	.gcm_init_p8,.-.gcm_init_p8
.size	.gcm_init_p10,.-.gcm_init_p10

.globl	.gcm_init_htable
	lis		r0,0xfff0
@@ -237,7 +237,7 @@ $code=<<___;
	.long		0
.size	.gcm_init_htable,.-.gcm_init_htable

.globl	.gcm_gmult_p8
.globl	.gcm_gmult_p10
	lis		r0,0xfff8
	li		r8,0x10
	mfspr		$vrsave,256
@@ -283,9 +283,9 @@ $code=<<___;
	.long		0
	.byte		0,12,0x14,0,0,0,2,0
	.long		0
.size	.gcm_gmult_p8,.-.gcm_gmult_p8
.size	.gcm_gmult_p10,.-.gcm_gmult_p10

.globl	.gcm_ghash_p8
.globl	.gcm_ghash_p10
	lis		r0,0xfff8
	li		r8,0x10
	mfspr		$vrsave,256
@@ -350,7 +350,7 @@ Loop:
	.long		0
	.byte		0,12,0x14,0,0,0,4,0
	.long		0
.size	.gcm_ghash_p8,.-.gcm_ghash_p8
.size	.gcm_ghash_p10,.-.gcm_ghash_p10

.asciz  "GHASH for PowerISA 2.07, CRYPTOGAMS by <appro\@openssl.org>"
.align  2