From nobody Fri Dec 29 23:09:00 2023 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4T21K82kj2z55T1Q; Fri, 29 Dec 2023 23:09:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4T21K81sYyz4H2m; Fri, 29 Dec 2023 23:09:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1703891340; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=i1xijWklCXU2WbYy2mm6ao1by382KDCWXlGT4JyCN3Q=; b=loEZwgHko8tbRSiHZdGCusKEmV6KFFypk8wOcUgiVVTRLOckc46D/8PowUWeicdb/II6RO PLmFQ7QDwt/mNPZWZe1Zm1lfpJipOhTZYToDKX7zlJsOuZtiTwzQFA1l3ZO8yKQx4DyhW6 jXwMcr8sAoR8Z9fkP6IYtX1F34ETO+eA8l6njFzUa5dlxQQRtRUXCruKRGPtH0J9vZ2eue WePurj8eTNqqeQPNyWBT3m5K5G0fkSgcK71NV0BPmrFiqPB9cqmosC+3lphSBq/uwxEBio aZM8vxZtPvtWVzrRGCdWOLWd53BLE+k8kQ1P5xm/adqlT70djUifiBqHConV/Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1703891340; a=rsa-sha256; cv=none; b=CAg71yp19Pma5HvaEzoOcO09kkUpBz4yYk372e9X2lPkSVxQRvOuWHQ9TU/zf5L4BL3DYy GE3p1v72VCavVXHM7+MILUdjizJaQeBDF9o6bBxUj0j94Zbe+ultZYE6MDNSxpsA+eMSom N5g0r8Qrgah6XSw1gcOCyCafmJodi3Y/5NCTtnvnyncYHRLYrQy2Kc2OFnLvxWLRx6qyZP Rya2g7VLoowtoZCYt14a3994hNM+hbA/Dv51em0RmRIF1lUzcrxTYGrE9aUsiuhRg0qiAM 1eefkTvdgxtGryrUQLdyuCZ3v34O0LOjfgok1xam6cvKfsoUgdzukrCgJLU2UA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1703891340; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=i1xijWklCXU2WbYy2mm6ao1by382KDCWXlGT4JyCN3Q=; b=Vf4MmiR+KNKqY56QpQhILD+Qv0/HcqSskFlamfNDt4rD4an/HUFTLtEjNoGKnEOS2IqI23 TsrlP5y0unflFTi3g6cHyod0q+nG5jjwIxJCz8EckL/4bWvDswyDhGuJKR//Bo9e9Ht99K 7iMiKZUTiPGLHohHdttxcPiOMFI7PL9A5vGK1n+xMlqzcUpMibr0ykWT2CuJCoixQGv8Ux +geVHL1JdH2guwi5VEIdnP7zPaP+lhx8Dob5RtSO8yyHpq/52iLu0T1C0MBXe/tb0SCD2D QeT2HjsE6w4xwuMeqiM9Tqld4SIgBCw3he3mn20HiyATnykN/BeayZHzZkivGQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4T21K80zN1zBGX; Fri, 29 Dec 2023 23:09:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3BTN909e075726; Fri, 29 Dec 2023 23:09:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3BTN90GB075723; Fri, 29 Dec 2023 23:09:00 GMT (envelope-from git) Date: Fri, 29 Dec 2023 23:09:00 GMT Message-Id: <202312292309.3BTN90GB075723@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: 332774b2aff1 - stable/14 - blake2: Switch to using FPU_KERN_NOCTX List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 332774b2aff18c848e4967be024627cdeb01e337 Auto-Submitted: auto-generated The branch stable/14 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=332774b2aff18c848e4967be024627cdeb01e337 commit 332774b2aff18c848e4967be024627cdeb01e337 Author: John Baldwin AuthorDate: 2023-08-28 23:24:32 +0000 Commit: John Baldwin CommitDate: 2023-12-29 21:49:42 +0000 blake2: Switch to using FPU_KERN_NOCTX Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D41580 (cherry picked from commit 3e912bdc31a9e5372d3cedf35c6f566871b8ede7) --- sys/crypto/blake2/blake2_cryptodev.c | 108 +++++++---------------------------- 1 file changed, 22 insertions(+), 86 deletions(-) diff --git a/sys/crypto/blake2/blake2_cryptodev.c b/sys/crypto/blake2/blake2_cryptodev.c index 77f7abaefcf8..755ac12c5d78 100644 --- a/sys/crypto/blake2/blake2_cryptodev.c +++ b/sys/crypto/blake2/blake2_cryptodev.c @@ -54,22 +54,6 @@ struct blake2_softc { struct rwlock lock; }; -static struct mtx_padalign *ctx_mtx; -static struct fpu_kern_ctx **ctx_fpu; - -#define ACQUIRE_CTX(i, ctx) \ - do { \ - (i) = PCPU_GET(cpuid); \ - mtx_lock(&ctx_mtx[(i)]); \ - (ctx) = ctx_fpu[(i)]; \ - } while (0) -#define RELEASE_CTX(i, ctx) \ - do { \ - mtx_unlock(&ctx_mtx[(i)]); \ - (i) = -1; \ - (ctx) = NULL; \ - } while (0) - static int blake2_cipher_setup(struct blake2_session *ses, const struct crypto_session_params *csp); static int blake2_cipher_process(struct blake2_session *ses, @@ -94,30 +78,10 @@ blake2_probe(device_t dev) return (0); } -static void -blake2_cleanctx(void) -{ - int i; - - /* XXX - no way to return driverid */ - CPU_FOREACH(i) { - if (ctx_fpu[i] != NULL) { - mtx_destroy(&ctx_mtx[i]); - fpu_kern_free_ctx(ctx_fpu[i]); - } - ctx_fpu[i] = NULL; - } - free(ctx_mtx, M_BLAKE2); - ctx_mtx = NULL; - free(ctx_fpu, M_BLAKE2); - ctx_fpu = NULL; -} - static int blake2_attach(device_t dev) { struct blake2_softc *sc; - int i; sc = device_get_softc(dev); sc->dying = false; @@ -130,21 +94,6 @@ blake2_attach(device_t dev) return (ENOMEM); } - ctx_mtx = malloc(sizeof(*ctx_mtx) * (mp_maxid + 1), M_BLAKE2, - M_WAITOK | M_ZERO); - ctx_fpu = malloc(sizeof(*ctx_fpu) * (mp_maxid + 1), M_BLAKE2, - M_WAITOK | M_ZERO); - - CPU_FOREACH(i) { -#ifdef __amd64__ - ctx_fpu[i] = fpu_kern_alloc_ctx_domain( - pcpu_find(i)->pc_domain, FPU_KERN_NORMAL); -#else - ctx_fpu[i] = fpu_kern_alloc_ctx(FPU_KERN_NORMAL); -#endif - mtx_init(&ctx_mtx[i], "bl2fpumtx", NULL, MTX_DEF | MTX_NEW); - } - rw_init(&sc->lock, "blake2_lock"); return (0); @@ -164,8 +113,6 @@ blake2_detach(device_t dev) rw_destroy(&sc->lock); - blake2_cleanctx(); - return (0); } @@ -332,80 +279,69 @@ blake2_cipher_process(struct blake2_session *ses, struct cryptop *crp) } bctx; char res[BLAKE2B_OUTBYTES], res2[BLAKE2B_OUTBYTES]; const struct crypto_session_params *csp; - struct fpu_kern_ctx *ctx; const void *key; - int ctxidx; - bool kt; int error, rc; unsigned klen; - ctx = NULL; - ctxidx = 0; - error = EINVAL; - - kt = is_fpu_kern_thread(0); - if (!kt) { - ACQUIRE_CTX(ctxidx, ctx); - fpu_kern_enter(curthread, ctx, - FPU_KERN_NORMAL | FPU_KERN_KTHR); - } - csp = crypto_get_params(crp->crp_session); if (crp->crp_auth_key != NULL) key = crp->crp_auth_key; else key = csp->csp_auth_key; klen = csp->csp_auth_klen; + + fpu_kern_enter(curthread, NULL, FPU_KERN_NORMAL | FPU_KERN_NOCTX); + switch (csp->csp_auth_alg) { case CRYPTO_BLAKE2B: if (klen > 0) rc = blake2b_init_key(&bctx.sb, ses->mlen, key, klen); else rc = blake2b_init(&bctx.sb, ses->mlen); - if (rc != 0) - goto out; + if (rc != 0) { + error = EINVAL; + break; + } error = crypto_apply(crp, crp->crp_payload_start, crp->crp_payload_length, blake2b_applicator, &bctx.sb); if (error != 0) - goto out; + break; rc = blake2b_final(&bctx.sb, res, ses->mlen); - if (rc != 0) { + if (rc != 0) error = EINVAL; - goto out; - } break; case CRYPTO_BLAKE2S: if (klen > 0) rc = blake2s_init_key(&bctx.ss, ses->mlen, key, klen); else rc = blake2s_init(&bctx.ss, ses->mlen); - if (rc != 0) - goto out; + if (rc != 0) { + error = EINVAL; + break; + } error = crypto_apply(crp, crp->crp_payload_start, crp->crp_payload_length, blake2s_applicator, &bctx.ss); if (error != 0) - goto out; + break; rc = blake2s_final(&bctx.ss, res, ses->mlen); - if (rc != 0) { + if (rc != 0) error = EINVAL; - goto out; - } break; default: - panic("unreachable"); + __assert_unreachable(); } + fpu_kern_leave(curthread, NULL); + + if (error != 0) + return (error); + if (crp->crp_op & CRYPTO_OP_VERIFY_DIGEST) { crypto_copydata(crp, crp->crp_digest_start, ses->mlen, res2); if (timingsafe_bcmp(res, res2, ses->mlen) != 0) - return (EBADMSG); + error = EBADMSG; } else crypto_copyback(crp, crp->crp_digest_start, ses->mlen, res); -out: - if (!kt) { - fpu_kern_leave(curthread, ctx); - RELEASE_CTX(ctxidx, ctx); - } return (error); }