Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp9330717rwl; Sun, 1 Jan 2023 01:15:29 -0800 (PST) X-Google-Smtp-Source: AMrXdXvb+R7r/U87FQnO6xTrO7/3kmUjTilMgkxbT5whaaWMvHnYGxLi7vYOzZakn3EACQYaV5gW X-Received: by 2002:a17:902:7446:b0:191:3f74:47a6 with SMTP id e6-20020a170902744600b001913f7447a6mr38606585plt.60.1672564529502; Sun, 01 Jan 2023 01:15:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672564529; cv=none; d=google.com; s=arc-20160816; b=nI+a2ito78DyblFJrLrnrY63MEGADVHRDKnvCaoTdheHP+yUXGSi52JDMF3ktV41wZ JE0hM/SxrHQwV6BTbRpycaH1xvFVJZ0ImfNO8VJjr+p5AFPTAYVbY56MACItg714l2y/ QxxS/IsDOQUOriFmyKlxi/drByxbAcBrZNUjaOMOBQFQF0N8U6wMqk4tX8uEjAFOVXAz MVh0b7co6B3QQo5PjWHedyARVa9UnOYADc56LGQ+eNF1EcOaUt0Z6scMFVZKgaf8dKZE LV0Vqnmzj2rJnu3Tvk7nFv2abAQpD6xxzCEWINJUjRXBUC0HmO8G8bcpIAg/mzCc0Wf7 +YEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=y7PblET/JPCaN/XieDyKJG3ZqPclmmA6nXCaO7S6B1M=; b=pQ8i8+gh7NW2Mvp4doOQt2CpGPz19qnZSJmUMWeB8jUT3JgERhvPqkk1evM2uuPvL8 JL4xlhqyXJqyk/9j6YcwNn1obhsBye86bzlY+u/BuxP6IKQcY5v0iHmkTVYqqPkMqwww JeFNTJ1Fm3gzrDeAKIUaelPSh0kRaUBun9X0GOn8y+BLB7YLiT7OaHPA3S38yafyOIcj nViDIPPK3hStL4mb6+pAAWrSSfC4aWAUPmrfZvGOKy466uI+calMUxnTZfSrpjF0sGMp 23j7lgd0H+S4rrCfe7s7/kuWJ7CXEQIaK351sKTEFIjACpiEEcMJAnWm6Iwqze+bxdiS ruLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=L2P1db7L; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z6-20020a170902834600b00188f9534a59si24376090pln.306.2023.01.01.01.15.06; Sun, 01 Jan 2023 01:15:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=L2P1db7L; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229476AbjAAJNP (ORCPT + 99 others); Sun, 1 Jan 2023 04:13:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229565AbjAAJNO (ORCPT ); Sun, 1 Jan 2023 04:13:14 -0500 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B53795FB9 for ; Sun, 1 Jan 2023 01:13:12 -0800 (PST) Received: by mail-pf1-x42e.google.com with SMTP id w203so383080pfc.12 for ; Sun, 01 Jan 2023 01:13:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y7PblET/JPCaN/XieDyKJG3ZqPclmmA6nXCaO7S6B1M=; b=L2P1db7LmzAVPlbyKkRvVOCLVHJaEIvBwkcPK1JKfajxoL3J18+Mlirh06Vvu8EYBO DQiymhLzzaS34bqWnJvuEBnrNocRv8AOUOlzMr9pI3hTTqojNKB+A0nwlaBUWOZZ8VLh NtlX/t5w905hkYZ5ltn6tNsxxUfIcdFASPSys1Zp0fu1svJqUi8isXVpZe5X143B1tyP yU/yuhxwXpnovPtQELrgmyyJNQR9cvGHwBQba3n7A+TFWERLnBIujn6JSkIPiufdQ/rK cbTNaH9oCctwvYV4KWGeXiTbFzkcvf9YMYwb6NGjLyKIjoVLD23H3U8VsubF9bXZe0xq Grnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y7PblET/JPCaN/XieDyKJG3ZqPclmmA6nXCaO7S6B1M=; b=WFJIMv48+ouLqp5KPtQBteRSIqSn1tPvCxLfMT+0Lwx4KlCeb0KpCeKQ6zpatPkZoy myBfwKKYmnsQlz414z6VZFuI0iJzkYrgTULReUTt/HZyAjCfy/Ted9dYi39ZBipbaIiZ siAaL0seB00rchJHpJ3YTl6pB8ZCgY83Wv/6IJgwOlRulxCBlUk3CjGih8+SGeEdvcnb thzNgObSeqGChbqkPmNRA+QTs1UnSae39h9ot8ZjA0N8OZWSqYSfutC2kWLdEAgKe8L7 ztRPSuE/f93UI6K2kKMbGYXhoGYZKKYOarPMFiGdXoUNbH7NZ7FKkwyt8xTEJRsWOP/7 SgQw== X-Gm-Message-State: AFqh2koxaZSpUUeKr1joDwhcsXPbfGLNAkMqMjcEHJIs9CfgKsViPZ0V YnQGX3JMsat8pF9b/mVJyY1i2hLyoUNDyQ== X-Received: by 2002:a05:6a00:d1:b0:580:eb71:40f0 with SMTP id e17-20020a056a0000d100b00580eb7140f0mr30796962pfj.23.1672564391525; Sun, 01 Jan 2023 01:13:11 -0800 (PST) Received: from ap.. ([182.213.254.91]) by smtp.gmail.com with ESMTPSA id k26-20020aa79d1a000000b0058130f1eca1sm10951327pfp.182.2023.01.01.01.13.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Jan 2023 01:13:10 -0800 (PST) From: Taehee Yoo To: linux-crypto@vger.kernel.org, herbert@gondor.apana.org.au, davem@davemloft.net, x86@kernel.org Cc: elliott@hpe.com, jussi.kivilinna@iki.fi, ebiggers@kernel.org, ap420073@gmail.com Subject: [PATCH v8 2/4] crypto: aria: do not use magic number offsets of aria_ctx Date: Sun, 1 Jan 2023 09:12:50 +0000 Message-Id: <20230101091252.700117-3-ap420073@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230101091252.700117-1-ap420073@gmail.com> References: <20230101091252.700117-1-ap420073@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org aria-avx assembly code accesses members of aria_ctx with magic number offset. If the shape of struct aria_ctx is changed carelessly, aria-avx will not work. So, we need to ensure accessing members of aria_ctx with correct offset values, not with magic numbers. It adds ARIA_CTX_enc_key, ARIA_CTX_dec_key, and ARIA_CTX_rounds in the asm-offsets.c So, correct offset definitions will be generated. aria-avx assembly code can access members of aria_ctx safely with these definitions. Signed-off-by: Taehee Yoo --- v8: - Rebase v7: - Use IS_ENABLED() instead of defined() v6: - Rebase for "CFI fixes" patchset. v5: - No changes. v4: - Add BUILD_BUG_ON() to check size of fields of aria_ctx. v3: - Patch introduced. arch/x86/crypto/aria-aesni-avx-asm_64.S | 26 +++++++++++-------------- arch/x86/kernel/asm-offsets.c | 8 ++++++++ crypto/aria_generic.c | 4 ++++ 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/arch/x86/crypto/aria-aesni-avx-asm_64.S b/arch/x86/crypto/aria-aesni-avx-asm_64.S index 03ae4cd1d976..be6adc6e7458 100644 --- a/arch/x86/crypto/aria-aesni-avx-asm_64.S +++ b/arch/x86/crypto/aria-aesni-avx-asm_64.S @@ -8,13 +8,9 @@ #include #include +#include #include -/* struct aria_ctx: */ -#define enc_key 0 -#define dec_key 272 -#define rounds 544 - /* register macros */ #define CTX %rdi @@ -874,7 +870,7 @@ SYM_FUNC_START_LOCAL(__aria_aesni_avx_crypt_16way) aria_fo(%xmm9, %xmm8, %xmm11, %xmm10, %xmm12, %xmm13, %xmm14, %xmm15, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %rax, %r9, 10); - cmpl $12, rounds(CTX); + cmpl $12, ARIA_CTX_rounds(CTX); jne .Laria_192; aria_ff(%xmm1, %xmm0, %xmm3, %xmm2, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, @@ -887,7 +883,7 @@ SYM_FUNC_START_LOCAL(__aria_aesni_avx_crypt_16way) aria_fo(%xmm9, %xmm8, %xmm11, %xmm10, %xmm12, %xmm13, %xmm14, %xmm15, %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %rax, %r9, 12); - cmpl $14, rounds(CTX); + cmpl $14, ARIA_CTX_rounds(CTX); jne .Laria_256; aria_ff(%xmm1, %xmm0, %xmm3, %xmm2, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, @@ -923,7 +919,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx_encrypt_16way) FRAME_BEGIN - leaq enc_key(CTX), %r9; + leaq ARIA_CTX_enc_key(CTX), %r9; inpack16_pre(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, @@ -948,7 +944,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx_decrypt_16way) FRAME_BEGIN - leaq dec_key(CTX), %r9; + leaq ARIA_CTX_dec_key(CTX), %r9; inpack16_pre(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, @@ -1056,7 +1052,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx_ctr_crypt_16way) leaq (%rdx), %r11; leaq (%rcx), %rsi; leaq (%rcx), %rdx; - leaq enc_key(CTX), %r9; + leaq ARIA_CTX_enc_key(CTX), %r9; call __aria_aesni_avx_crypt_16way; @@ -1157,7 +1153,7 @@ SYM_FUNC_START_LOCAL(__aria_aesni_avx_gfni_crypt_16way) %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %rax, %r9, 10); - cmpl $12, rounds(CTX); + cmpl $12, ARIA_CTX_rounds(CTX); jne .Laria_gfni_192; aria_ff_gfni(%xmm1, %xmm0, %xmm3, %xmm2, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, @@ -1174,7 +1170,7 @@ SYM_FUNC_START_LOCAL(__aria_aesni_avx_gfni_crypt_16way) %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %rax, %r9, 12); - cmpl $14, rounds(CTX); + cmpl $14, ARIA_CTX_rounds(CTX); jne .Laria_gfni_256; aria_ff_gfni(%xmm1, %xmm0, %xmm3, %xmm2, %xmm4, %xmm5, %xmm6, %xmm7, @@ -1218,7 +1214,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx_gfni_encrypt_16way) FRAME_BEGIN - leaq enc_key(CTX), %r9; + leaq ARIA_CTX_enc_key(CTX), %r9; inpack16_pre(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, @@ -1243,7 +1239,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx_gfni_decrypt_16way) FRAME_BEGIN - leaq dec_key(CTX), %r9; + leaq ARIA_CTX_dec_key(CTX), %r9; inpack16_pre(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, @@ -1275,7 +1271,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx_gfni_ctr_crypt_16way) leaq (%rdx), %r11; leaq (%rcx), %rsi; leaq (%rcx), %rdx; - leaq enc_key(CTX), %r9; + leaq ARIA_CTX_enc_key(CTX), %r9; call __aria_aesni_avx_gfni_crypt_16way; diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c index 82c783da16a8..ef9e951415c5 100644 --- a/arch/x86/kernel/asm-offsets.c +++ b/arch/x86/kernel/asm-offsets.c @@ -7,6 +7,7 @@ #define COMPILE_OFFSETS #include +#include #include #include #include @@ -111,5 +112,12 @@ static void __used common(void) #ifdef CONFIG_CALL_DEPTH_TRACKING OFFSET(X86_call_depth, pcpu_hot, call_depth); #endif +#if IS_ENABLED(CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64) + /* Offset for fields in aria_ctx */ + BLANK(); + OFFSET(ARIA_CTX_enc_key, aria_ctx, enc_key); + OFFSET(ARIA_CTX_dec_key, aria_ctx, dec_key); + OFFSET(ARIA_CTX_rounds, aria_ctx, rounds); +#endif } diff --git a/crypto/aria_generic.c b/crypto/aria_generic.c index 4cc29b82b99d..d96dfc4fdde6 100644 --- a/crypto/aria_generic.c +++ b/crypto/aria_generic.c @@ -178,6 +178,10 @@ int aria_set_key(struct crypto_tfm *tfm, const u8 *in_key, unsigned int key_len) if (key_len != 16 && key_len != 24 && key_len != 32) return -EINVAL; + BUILD_BUG_ON(sizeof(ctx->enc_key) != 272); + BUILD_BUG_ON(sizeof(ctx->dec_key) != 272); + BUILD_BUG_ON(sizeof(int) != sizeof(ctx->rounds)); + ctx->key_length = key_len; ctx->rounds = (key_len + 32) / 4; -- 2.34.1