From nobody Thu Oct 08 20:43:44 2026 X-Original-To: dev-commits-src-all@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 4j125Y02jWz4n2m1 for ; Thu, 08 Oct 2026 20:43:45 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4j125X56tyz4b6k for ; Thu, 08 Oct 2026 20:43:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791492224; 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=ctZHmsG0l2UN5+Qkd47GaezAegM6icyA+7G6wnjjabU=; b=q6H+DxAUAkEi3CfCDBFmY+ehmW+j0cxEf6HJODfgFDLnyBm/Nrltwna3LVPscWtlZyiekQ zIvWhUVa8ThwTJNKtOCLt0KdxM4h5Of5jwAG4+yvgA2jrfm8z0ApWMwluvPwLSNfwvM9iU nQA+RhxI9tZK32STy8b8pwkvmEl/atGE3JwLMbGUPiaeonrHDioTuoZ/TUcbslkn58W9GL iz34rnT1bfYBzm4/7Knn9ZrYyVfysMStbYlxpg+Fuv5B6JVkM3gv5cXztMLcYV2+DKwSEa zifQoQ7O3HhPFAQQHkTtP6ZoKSCY9VXWzMRmfu9PVatxDnZ4RozG/8Akt6IQog== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791492224; b=qQ2EHAQm2iGsV6HhkUIPe8vSZ+CdptlWZUDW5pM5abTFEOT33blrE30nOYKHlSetEOpwUc M7uuqTUsHZAvO5fnb4HbWMsc7HKhCmSej+D30ldRWEK9tolrbK6/KFx4wckl4AjSPDGir7 qqWWPpA83s/9hi1frPV2DbhVmCrIbBxFEUHLqiDuD56WZAmWhj+TBl3j46K34++pDF6trh sfB5qAagQzhhqlcP1MK4k5Pc6kUYc7niWEPEuM84qFRglsIkxNJo4z17v14qDLJC3b94RN lJ+JoEFXDV7kfM4duXjPaZ6A0aRvXi/apywMiaqzidMrb3/WGSe1FoJfxH7hSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791492224; 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=ctZHmsG0l2UN5+Qkd47GaezAegM6icyA+7G6wnjjabU=; b=KEDQ8F9MY9pIK6nhU5GVCjY/vYQXUM4XWwcQO2ZPl+0NxOpDt89To1+WTrltSUMwxnWPYD 9Ah7zLrd/PBj4FNtOVY7EQGOwwt8BP39ZDA6NN3jGh+x2rv2tX2iYYLdxqvIy8fRucyMIA iAAr6b2o59cEreT5lKvxKLtrazSIORhiAFIfZKbjuQlcMwtvUqjsf/fQ658Flc0+E3QDTu QPw8XcP8ifZBA8rt3ADq6xau38Xt6AmWARNdDLwgpr3NGvLJSC34+SHF2wCEZ5mgVjCZBT caj4aKpFa11lenwik1tk61linIANOQls8ttFobq7asrTQ62F5ULkb8aB4LHEcw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4j125X3vKdzwmM for ; Thu, 08 Oct 2026 20:43:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33419 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 08 Oct 2026 20:43:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: 3049231f68da - stable/15 - ktls: Make ktls_mbuf_crypto_state private and simplify List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/15 X-Git-Reftype: branch X-Git-Commit: 3049231f68dadd0adb77154d68c0e1db851f0083 Auto-Submitted: auto-generated Date: Thu, 08 Oct 2026 20:43:44 +0000 Message-Id: <6ac80080.33419.44dc3f23@gitrepo.freebsd.org> The branch stable/15 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=3049231f68dadd0adb77154d68c0e1db851f0083 commit 3049231f68dadd0adb77154d68c0e1db851f0083 Author: John Baldwin AuthorDate: 2026-06-23 15:51:43 +0000 Commit: John Baldwin CommitDate: 2026-10-08 20:42:31 +0000 ktls: Make ktls_mbuf_crypto_state private and simplify Sponsored by: Chelsio Communications (cherry picked from commit 1a03b40a134318f26c93d85087de6a588b65f217) --- sys/kern/uipc_ktls.c | 49 ++++++++++++++++++++++++------------------------- sys/sys/ktls.h | 8 -------- 2 files changed, 24 insertions(+), 33 deletions(-) diff --git a/sys/kern/uipc_ktls.c b/sys/kern/uipc_ktls.c index 7cb60725abd9..6fc37ec2a829 100644 --- a/sys/kern/uipc_ktls.c +++ b/sys/kern/uipc_ktls.c @@ -77,6 +77,13 @@ #include #include +typedef enum { + KTLS_MBUF_CRYPTO_ST_MIXED = 0, + KTLS_MBUF_CRYPTO_ST_ENCRYPTED = 1, + KTLS_MBUF_CRYPTO_ST_DECRYPTED = -1, + KTLS_MBUF_CRYPTO_ST_SHAREDMBUF = -2, +} ktls_mbuf_crypto_st_t; + struct ktls_wq { struct mtx mtx; STAILQ_HEAD(, mbuf) m_head; @@ -2421,26 +2428,21 @@ tls13_find_record_type(struct ktls_session *tls, struct mbuf *m, int tls_len, } /* - * Check if a mbuf chain is fully decrypted at the given offset and - * length. Returns KTLS_MBUF_CRYPTO_ST_DECRYPTED if all data is - * decrypted. KTLS_MBUF_CRYPTO_ST_MIXED if there is a mix of encrypted - * and decrypted data. KTLS_MBUF_CRYPTO_ST_ENCRYPTED if all data is - * encrypted. KTLS_MBUF_CRYPTO_ST_SHAREDMBUF if any mbuf points at + * Check if a mbuf chain is fully decrypted. Returns + * KTLS_MBUF_CRYPTO_ST_DECRYPTED if all data is decrypted. + * KTLS_MBUF_CRYPTO_ST_MIXED if there is a mix of encrypted and + * decrypted data. KTLS_MBUF_CRYPTO_ST_ENCRYPTED if all data is + * encrypted. KTLS_MBUF_CRYPTO_ST_SHAREDMBUF if any mbuf points at * shared data that must not be modified in place (non-anonymous * M_EXTPG or sendfile M_EXT buffers). */ -ktls_mbuf_crypto_st_t -ktls_mbuf_crypto_state(struct mbuf *mb, int offset, int len) +static ktls_mbuf_crypto_st_t +ktls_mbuf_crypto_state(struct mbuf *mb) { - int m_flags_ored = 0; - int m_flags_anded = -1; + bool seen_decrypted, seen_encrypted; - for (; mb != NULL; mb = mb->m_next) { - if (offset < mb->m_len) - break; - offset -= mb->m_len; - } - offset += len; + seen_decrypted = false; + seen_encrypted = false; for (; mb != NULL; mb = mb->m_next) { if ((mb->m_flags & M_EXTPG) != 0 && @@ -2451,19 +2453,16 @@ ktls_mbuf_crypto_state(struct mbuf *mb, int offset, int len) (mb->m_ext.ext_flags & EXT_FLAG_SFBUF_ANON) == 0) return (KTLS_MBUF_CRYPTO_ST_SHAREDMBUF); - m_flags_ored |= mb->m_flags; - m_flags_anded &= mb->m_flags; - - if (offset <= mb->m_len) - break; - offset -= mb->m_len; + if (mb->m_flags & M_DECRYPTED) + seen_decrypted = true; + else + seen_encrypted = true; } - MPASS(mb != NULL || offset == 0); - if ((m_flags_ored ^ m_flags_anded) & M_DECRYPTED) + if (seen_decrypted && seen_encrypted) return (KTLS_MBUF_CRYPTO_ST_MIXED); else - return ((m_flags_ored & M_DECRYPTED) ? + return (seen_decrypted ? KTLS_MBUF_CRYPTO_ST_DECRYPTED : KTLS_MBUF_CRYPTO_ST_ENCRYPTED); } @@ -2615,7 +2614,7 @@ ktls_decrypt(struct socket *so) SOCKBUF_UNLOCK(sb); /* get crypto state for this TLS record */ - state = ktls_mbuf_crypto_state(data, 0, tls_len); + state = ktls_mbuf_crypto_state(data); switch (state) { case KTLS_MBUF_CRYPTO_ST_MIXED: diff --git a/sys/sys/ktls.h b/sys/sys/ktls.h index fc9c0316654e..3f85ff8ac709 100644 --- a/sys/sys/ktls.h +++ b/sys/sys/ktls.h @@ -237,13 +237,6 @@ struct ktls_session { extern unsigned int ktls_ifnet_max_rexmit_pct; -typedef enum { - KTLS_MBUF_CRYPTO_ST_MIXED = 0, - KTLS_MBUF_CRYPTO_ST_ENCRYPTED = 1, - KTLS_MBUF_CRYPTO_ST_DECRYPTED = -1, - KTLS_MBUF_CRYPTO_ST_SHAREDMBUF = -2, -} ktls_mbuf_crypto_st_t; - void ktls_check_rx(struct sockbuf *sb); void ktls_cleanup_tls_enable(struct tls_enable *tls); int ktls_copyin_tls_enable(struct sockopt *sopt, struct tls_enable *tls); @@ -259,7 +252,6 @@ int ktls_get_rx_mode(struct socket *so, int *modep); int ktls_get_tx_mode(struct socket *so, int *modep); int ktls_get_rx_sequence(struct inpcb *inp, uint32_t *tcpseq, uint64_t *tlsseq); void ktls_input_ifp_mismatch(struct sockbuf *sb, struct ifnet *ifp); -ktls_mbuf_crypto_st_t ktls_mbuf_crypto_state(struct mbuf *mb, int offset, int len); #ifdef RATELIMIT int ktls_modify_txrtlmt(struct ktls_session *tls, uint64_t max_pacing_rate); #endif