From nobody Mon Mar 24 06:41:19 2025 X-Original-To: dev-commits-src-main@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 4ZLk3N6n2Jz5rTk1; Mon, 24 Mar 2025 06:41:20 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZLk3N1Jjlz3x8P; Mon, 24 Mar 2025 06:41:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1742798480; 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=WaKeY98C+nm73FkC89QuLNuMqVtSqhLm3e1RFzZ34qg=; b=ymianBXNcvlNA4k1P3isIw67GwyXoR2hIQYv668jvpjRvo+3vD/7OzJkHnI7Prjjf5MeJr nVbZoZ57CLsEoVUcPAsPRuFy0dXagfy6A4BmSA91/hFaXiP3yH01ofkAYlRWDxBjauKLKI rpOXRrP9aLbkOMmmP5oRyAygNARiXl5vdmbJosYXkQSknu5ovePNaj1bqrUUO82g3rNaa5 BzxiSOWvC7+fqSVcbUyMYHYtXLnyjSekDUkJunSQvbq9yRBuCEkPmd+RaiUJp/BDzRM5RD Wn942Tb7TVaXpwLeOHCnvEUv2oO5ze81YDhQ9pviqzqZPTUlFZMOwz/AD7ntVQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1742798480; a=rsa-sha256; cv=none; b=v6Zldf5qtqDMUinJCSi5E/rYQ0prB9cDQElouOB61WoIFZQ5eWO09lIWZTX89aw55x/vzZ jUeIxMg2ZqYL1TASVLgzUKkFRaXWjuV7Y5hWkrnjHhDd+zJmZX0kLqbCh71w5fVyCMpYlc xEU5XcMX4eqDI9LLWMxLlxxDGaxpTZBdbvYTxZodHYhNPz557NQMTymVUIkWNNIfjo4AFO 89WoITnyhBtiAwMHQjJKHtDNCzf7Lop5nIQbNhS9ArpkaeHc9cWu6/GcjiuciRpedJJ03A CM8ndHc+XV5j6YBbBW09lYJTUA+8Q1nfi2tlXOqfS8oZKNUyhmhhLJ5w5sDBiQ== 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=1742798480; 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=WaKeY98C+nm73FkC89QuLNuMqVtSqhLm3e1RFzZ34qg=; b=BSl1L5c//OvP2eEJkzaRwHuU27pmo4VJWzeRJWbpAoIe8rpFHyJmvFWjv4F1e1VRmmRTIY +T+bQ47jmv4FNh06zf1EbarnSQiwFBKVn/z/oykp8X7qltfu6UxlPKsA+DIdV9mRgw25Iz bszQWM7cdqNME8EC8hXEkG0P+5BEOOc94zbFIcDg07X92HCcWaubbKkStZeNYRU2vOSL2V 0onr/bEbHzjf8o+bEy/of2yxJUpKuXkf6Q74iKn9bo0jxEOndZWzqkPM5tV0A911IMJXaP HYJRZvJnl9ZMEglqALyoWai14QqR004fwILMGy4kxXMxq/zG+Ya16BUjASLrbw== 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 4ZLk3M6SzHzjxt; Mon, 24 Mar 2025 06:41:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 52O6fJgX052827; Mon, 24 Mar 2025 06:41:19 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 52O6fJuG052824; Mon, 24 Mar 2025 06:41:19 GMT (envelope-from git) Date: Mon, 24 Mar 2025 06:41:19 GMT Message-Id: <202503240641.52O6fJuG052824@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 67c1c4dfd1cc - main - sockbuf: provide sbunreserve_locked() which is a complement to sbreserve() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 67c1c4dfd1ccf7d46271bfbabc403dc0534c1631 Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=67c1c4dfd1ccf7d46271bfbabc403dc0534c1631 commit 67c1c4dfd1ccf7d46271bfbabc403dc0534c1631 Author: Gleb Smirnoff AuthorDate: 2025-03-24 06:40:50 +0000 Commit: Gleb Smirnoff CommitDate: 2025-03-24 06:40:50 +0000 sockbuf: provide sbunreserve_locked() which is a complement to sbreserve() The sbreserve() works only on protocol-independent parts of the sockbuf, but sbrelease() also clears the generic sockbuf mbuf chain. Calling the latter to undo changes done by the former is not correct. The new function is the right thing. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D49364 --- sys/kern/uipc_sockbuf.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c index 48984046ea8a..ec00878cd9a5 100644 --- a/sys/kern/uipc_sockbuf.c +++ b/sys/kern/uipc_sockbuf.c @@ -75,6 +75,7 @@ static void sbcompress_ktls_rx(struct sockbuf *sb, struct mbuf *m, struct mbuf *n); #endif static struct mbuf *sbcut_internal(struct sockbuf *sb, int len); +static void sbunreserve_locked(struct socket *so, sb_which which); /* * Our own version of m_clrprotoflags(), that can preserve M_NOTREADY. @@ -618,7 +619,7 @@ soreserve(struct socket *so, u_long sndcc, u_long rcvcc) SOCK_SENDBUF_UNLOCK(so); return (0); bad2: - sbrelease_locked(so, SO_SND); + sbunreserve_locked(so, SO_SND); bad: SOCK_RECVBUF_UNLOCK(so); SOCK_SENDBUF_UNLOCK(so); @@ -683,6 +684,18 @@ sbreserve_locked(struct socket *so, sb_which which, u_long cc, return (sbreserve_locked_limit(so, which, cc, sb_max, td)); } +static void +sbunreserve_locked(struct socket *so, sb_which which) +{ + struct sockbuf *sb = sobuf(so, which); + + SOCK_BUF_LOCK_ASSERT(so, which); + + (void)chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, 0, + RLIM_INFINITY); + sb->sb_mbmax = 0; +} + int sbsetopt(struct socket *so, struct sockopt *sopt) { @@ -786,9 +799,7 @@ sbrelease_locked(struct socket *so, sb_which which) SOCK_BUF_LOCK_ASSERT(so, which); sbflush_locked(sb); - (void)chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, 0, - RLIM_INFINITY); - sb->sb_mbmax = 0; + sbunreserve_locked(so, which); } void