Linux 6.19 compat: in-tree build: fix duplicate GCM assembly functions

Linux 6.19 added an AES-GCM VAES-AVX2 assembly implementation. It's
basically a translation from the BoringSSL perlasm syntax to macro
assembly. We're using the same source but the perlasm generated flat
assembly which shares some global function names with the former.
When  building in-tree this results in the linker failing due to the
duplicate symbols.

To avoid the error we prepend `icp_` via a macro to our function
names.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Moch <mail@alexmoch.com>
Signed-off-by: Attila Fülöp <attila@fueloep.org>
Closes #18204
Closes #18224
This commit is contained in:
Attila Fülöp 2026-02-17 22:09:41 +01:00 committed by GitHub
parent 0f9564e85b
commit bee53d8c10
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 41 additions and 0 deletions

View File

@ -34,6 +34,7 @@
#include <modes/gcm_impl.h>
#ifdef CAN_USE_GCM_ASM
#include <aes/aes_impl.h>
#include <modes/gcm_asm_rename_funcs.h>
#endif
#define GHASH(c, d, t, o) \

View File

@ -7,6 +7,7 @@
#define _ASM
#include <sys/asm_linkage.h>
#include <modes/gcm_asm_rename_funcs.h>
/* Windows userland links with OpenSSL */
#if !defined (_WIN32) || defined (_KERNEL)

View File

@ -0,0 +1,39 @@
// SPDX-License-Identifier: CDDL-1.0
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or https://opensource.org/licenses/CDDL-1.0.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2026 Attila Fülöp <attila@fueloep.org>
*/
/*
* Prepend `icp_` to each function name defined in gcm assembly files.
* This avoids potential symbol conflicts with linux libcrypto in case of
* in-tree compilation. To keep the diff noise low, we do this using macros.
*
* Currently only done for aesni-gcm-avx2-vaes.S since there is a real conflict.
*/
/* module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S */
#define gcm_init_vpclmulqdq_avx2 icp_gcm_init_vpclmulqdq_avx2
#define gcm_gmult_vpclmulqdq_avx2 icp_gcm_gmult_vpclmulqdq_avx2
#define gcm_ghash_vpclmulqdq_avx2 icp_gcm_ghash_vpclmulqdq_avx2
#define aes_gcm_enc_update_vaes_avx2 icp_aes_gcm_enc_update_vaes_avx2
#define aes_gcm_dec_update_vaes_avx2 icp_aes_gcm_dec_update_vaes_avx2