Index | Thread | Search

From:
Antoine Jacoutot <ajacoutot@bsdfrog.org>
Subject:
Re: security/libgcrypt fix for powerpc, powerpc64
To:
George Koehler <kernigh@gmail.com>
Cc:
ports@openbsd.org
Date:
Fri, 16 Aug 2024 09:43:53 +0200

Download raw body.

Thread
On Thu, Aug 15, 2024 at 08:26:02PM -0400, George Koehler wrote:
> This diff unbreaks security/libgcrypt for powerpc and powerpc64 and
> should not affect other archs.
> 
> Builds failed with "./sha256-ppc.c:294:8:warning: call to undeclared
> function 'vec_mergeo'" followed by errors.  Fix by building the VSX
> files with cc -mpower8-vector (Power ISA 2.07), so <altivec.h> in
> clang-16 defines vec_mergeo.  This matches how libgcrypt checks for
> ISA 2.07 before calling VSX functions.  (It isn't calling them on
> OpenBSD.  It will if we add the ISA stuff to elf_aux_info.)
> 
> After I unbroke the build, "make test" had mpi (integer) failures on
> powerpc64 until I added patch-mpi_config_links.  Now "make test"
> passes on powerpc64 and has 2 secmem failures on powerpc,
> 
> t-secmem: line 189: gcry_control ((GCRYCTL_INIT_SECMEM, pool_size, 0)) failed: General error
> t-sexp: line 1321: gcry_control ((GCRYCTL_INIT_SECMEM, 16384, 0)) failed: General error
> 
> Should I bump REVISION?
> powerpc and powerpc64 never packaged 1.11.0.
> 
> ok?    --gkoehler

OK

> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/security/libgcrypt/Makefile,v
> diff -u -p -r1.95 Makefile
> --- Makefile	10 Jul 2024 12:58:39 -0000	1.95
> +++ Makefile	15 Aug 2024 18:19:17 -0000
> @@ -6,6 +6,7 @@ USE_NOEXECONLY=		Yes
>  COMMENT=		crypto library based on code used in GnuPG
>  
>  DISTNAME=		libgcrypt-1.11.0
> +REVISION=		0
>  
>  CATEGORIES=		security
>  
> Index: patches/patch-cipher_Makefile_in
> ===================================================================
> RCS file: patches/patch-cipher_Makefile_in
> diff -N patches/patch-cipher_Makefile_in
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ patches/patch-cipher_Makefile_in	15 Aug 2024 18:19:17 -0000
> @@ -0,0 +1,15 @@
> +- powerpc and powerpc64: add -mpower8-vector to fix
> +  ./sha256-ppc.c:294:8: warning: call to undeclared function 'vec_mergeo'
> +
> +Index: cipher/Makefile.in
> +--- cipher/Makefile.in.orig
> ++++ cipher/Makefile.in
> +@@ -655,7 +655,7 @@ EXTRA_libcipher_la_SOURCES = \
> + @ENABLE_INSTRUMENTATION_MUNGING_TRUE@	-e 's/-fcoverage[=,\-][=,a-z,A-Z,0-9,\,,\-]*//g'
> + 
> + @ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_FALSE@ppc_vcrypto_cflags = 
> +-@ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_TRUE@ppc_vcrypto_cflags = -O2 -maltivec -mvsx -mcrypto
> ++@ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_TRUE@ppc_vcrypto_cflags = -O2 -maltivec -mvsx -mcrypto -mpower8-vector
> + @ENABLE_AARCH64_NEON_INTRINSICS_EXTRA_CFLAGS_FALSE@aarch64_neon_cflags = 
> + @ENABLE_AARCH64_NEON_INTRINSICS_EXTRA_CFLAGS_TRUE@aarch64_neon_cflags = -O2 -march=armv8-a+crypto
> + @ENABLE_X86_AVX512_INTRINSICS_EXTRA_CFLAGS_FALSE@avx512f_cflags = 
> Index: patches/patch-configure
> ===================================================================
> RCS file: /cvs/ports/security/libgcrypt/patches/patch-configure,v
> diff -u -p -r1.13 patch-configure
> --- patches/patch-configure	10 Jul 2024 12:58:39 -0000	1.13
> +++ patches/patch-configure	15 Aug 2024 18:19:17 -0000
> @@ -1,18 +1,29 @@
> -https://dev.gnupg.org/T6442
> +- powerpc and powerpc64: add -mpower8-vector to fix
> +  ./sha256-ppc.c:294:8: warning: call to undeclared function 'vec_mergeo'
> +- getrandom: https://dev.gnupg.org/T6442
>  
>  Index: configure
>  --- configure.orig
>  +++ configure
> -@@ -20021,6 +20021,12 @@ if test "$gcry_cv_gcc_inline_asm_ppc_altivec" = "yes" 
> - printf "%s\n" "#define HAVE_GCC_INLINE_ASM_PPC_ALTIVEC 1" >>confdefs.h
> - 
> +@@ -19906,7 +19906,7 @@ printf "%s\n" "#define HAVE_COMPATIBLE_CC_PPC_ALTIVEC 
>   fi
> + 
> + _gcc_cflags_save=$CFLAGS
> +-CFLAGS="$CFLAGS -O2 -maltivec -mvsx -mcrypto"
> ++CFLAGS="$CFLAGS -O2 -maltivec -mvsx -mcrypto -mpower8-vector"
> + 
> + if test "$gcry_cv_cc_ppc_altivec" = "no" &&
> +    test "$mpi_cpu_arch" = "ppc" &&
> +@@ -20019,6 +20019,12 @@ printf "%s\n" "$gcry_cv_gcc_inline_asm_ppc_altivec" >&
> + if test "$gcry_cv_gcc_inline_asm_ppc_altivec" = "yes" ; then
> + 
> + printf "%s\n" "#define HAVE_GCC_INLINE_ASM_PPC_ALTIVEC 1" >>confdefs.h
> ++
> ++fi
>  +ac_fn_c_check_func "$LINENO" "getrandom" "ac_cv_func_getrandom"
>  +if test "x$ac_cv_func_getrandom" = xyes
>  +then :
>  +  printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h
> -+
> -+fi
>   
> + fi
>   
> - #
> Index: patches/patch-mpi_config_links
> ===================================================================
> RCS file: patches/patch-mpi_config_links
> diff -N patches/patch-mpi_config_links
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ patches/patch-mpi_config_links	15 Aug 2024 18:19:17 -0000
> @@ -0,0 +1,36 @@
> +- For OpenBSD/powerpc64, don't pick powerpc32 asm.
> +
> +Index: mpi/config.links
> +--- mpi/config.links.orig
> ++++ mpi/config.links
> +@@ -272,15 +272,6 @@ case "${host}" in
> +        mpi_cpu_arch="ppc"
> +        ;;
> + 
> +-    powerpc*-*-netbsd* | powerpc*-*-openbsd*)
> +-       echo '/* configured {Open,Net}BSD on powerpc */' >>./mpi/asm-syntax.h
> +-       echo '#define ELF_SYNTAX'                 >>./mpi/asm-syntax.h
> +-       cat   $srcdir/mpi/powerpc32/syntax.h	 >>./mpi/asm-syntax.h
> +-       mpi_sflags="-Wa,-mppc"
> +-       path="powerpc32"
> +-       mpi_cpu_arch="ppc"
> +-       ;;
> +-
> +     ppc620-*-*	    | \
> +     powerpc64*-*-*)
> + 	mpi_sflags="-Wa,-mppc"
> +@@ -294,6 +285,14 @@ case "${host}" in
> + 	path="powerpc32"
> + 	mpi_cpu_arch="ppc"
> + 	;;
> ++    powerpc*-*-netbsd* | powerpc*-*-openbsd*)
> ++       echo '/* configured {Open,Net}BSD on powerpc */' >>./mpi/asm-syntax.h
> ++       echo '#define ELF_SYNTAX'                 >>./mpi/asm-syntax.h
> ++       cat   $srcdir/mpi/powerpc32/syntax.h	 >>./mpi/asm-syntax.h
> ++       mpi_sflags="-Wa,-mppc"
> ++       path="powerpc32"
> ++       mpi_cpu_arch="ppc"
> ++       ;;
> + 
> +     rs6000-*-aix[456789]*    | \
> +     rs6000-*-aix3.2.[456789])
> 

-- 
Antoine