From bee53d8c102db322afc8c668d48eebe3a23c0b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20F=C3=BCl=C3=B6p?= Date: Tue, 17 Feb 2026 22:09:41 +0100 Subject: [PATCH] Linux 6.19 compat: in-tree build: fix duplicate GCM assembly functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Alexander Moch Signed-off-by: Attila Fülöp Closes #18204 Closes #18224 --- module/icp/algs/modes/gcm.c | 1 + .../asm-x86_64/modes/aesni-gcm-avx2-vaes.S | 1 + .../icp/include/modes/gcm_asm_rename_funcs.h | 39 +++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 module/icp/include/modes/gcm_asm_rename_funcs.h diff --git a/module/icp/algs/modes/gcm.c b/module/icp/algs/modes/gcm.c index 3cfa5b816..ab2c5a49f 100644 --- a/module/icp/algs/modes/gcm.c +++ b/module/icp/algs/modes/gcm.c @@ -34,6 +34,7 @@ #include #ifdef CAN_USE_GCM_ASM #include +#include #endif #define GHASH(c, d, t, o) \ diff --git a/module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S b/module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S index 76ced8eba..950c1a7c8 100644 --- a/module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S +++ b/module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S @@ -7,6 +7,7 @@ #define _ASM #include +#include /* Windows userland links with OpenSSL */ #if !defined (_WIN32) || defined (_KERNEL) diff --git a/module/icp/include/modes/gcm_asm_rename_funcs.h b/module/icp/include/modes/gcm_asm_rename_funcs.h new file mode 100644 index 000000000..08c51aeed --- /dev/null +++ b/module/icp/include/modes/gcm_asm_rename_funcs.h @@ -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 + */ + +/* + * 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