From nobody Mon Apr 14 14:07:39 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 4Zbpyh23Fkz5ssc2; Mon, 14 Apr 2025 14:07:40 +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 4Zbpyh0zqPz3Qjh; Mon, 14 Apr 2025 14:07:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1744639660; 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=dxaLCvWiHzIRR6Bc6vFzb9rxf0HpzyrZWq6ZW7bHne4=; b=Txd3Ouokr6HEDLAFoB+s2F3ZFB7qAaszrCFU7+8W0oWxgsR7R9rno4qOB4NNMvgK1CzorR V/2rLnfAJ3O5GRlFZIG7qw7EAz9Wm+pgf053QAcpXoym2SyQFjhXEzvpD+jw4w18WJPkss 8+e/sr/KQLlhBdo6xRU/QqSuGT7WnLegOopHS+s+JL9R5Mv6e421+VKESbuvpV5kZvLje2 B6xJpbtBjmJYseYv8pGRmckA4szRQfL5E8DTvMrr8LURgo5ion09Sm9P5q9SKDV9j5M0U2 XGm1YbLnmWjOnmf/9WWqKCY40VsBInsG+Rq8pHw8F8Gx/lUGKD5WhMYlwQiZtw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1744639660; a=rsa-sha256; cv=none; b=msh0ODefKl2eHdejmb+CH0oiiLB1VrR0lPKJ+vJeU+RSwuLs6UnUiFlbtNl4qGsbozpWlY svjMvGuvCDILO78XDuokcG0xAy7XzNdvj4kCK7hr0Xa845KVLHs8jYkMsrGWX4gGChVEPg y/mzcNfLl6FxGtiAbfa9T9xI0zoFGmQdwOgVaXcZmqPQKZqyj5TILRDeDqkw3w6fu0iovz SoPjFywXZ+fnqrwluPf8CrtdfhS1r+ROTAzjgI0xFALUbPl5wFsjak/JaPApvo0YOf/2xP tgcfYuc4Uce3yPHds6VMCBCuXQGhKQs/iPmzImU+xTE0HlXNuSWCocq7HIhNnw== 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=1744639660; 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=dxaLCvWiHzIRR6Bc6vFzb9rxf0HpzyrZWq6ZW7bHne4=; b=Gp0AtJekj5yPPjt+9xyiI0tQqB7AhdXojnpR3TgYPZl0vFQUhMb4di6AoJbnwSvjJP9/pi EtIn7J8z6IgEJOP/GHx5DlXitHHEWXAbjH8/Dw77Um7tYZYCUp1SCK8COIvYuxR3MYGNS6 jyXOreb+Tf8yNSn1VpnNNJcybPaZKPcW3hE36oR7gFaEQ6W8lJvjw43wjmUf9bgst6b85r GjWK9WBnEgp4M5o/k7slC2X818hpZzg/cUpksCp2L12Ba61kb1Jjiija+e+md5WxOLHWsb F+HoJNUtdW6o3Z2qpdLKmthYx2JQV/gxN82Ug4ag61fMHn076BNoc0yM0PF/5g== 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 4Zbpyh0Wcgzrx6; Mon, 14 Apr 2025 14:07:40 +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 53EE7dYx032414; Mon, 14 Apr 2025 14:07:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53EE7d9V032411; Mon, 14 Apr 2025 14:07:39 GMT (envelope-from git) Date: Mon, 14 Apr 2025 14:07:39 GMT Message-Id: <202504141407.53EE7d9V032411@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: 9a45c3ca8501 - main - LinuxKPI: 802.11: deal with the error paths for lkpi_xmit() 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: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9a45c3ca850110c5871742fadbf7355c1085c725 Auto-Submitted: auto-generated The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=9a45c3ca850110c5871742fadbf7355c1085c725 commit 9a45c3ca850110c5871742fadbf7355c1085c725 Author: Bjoern A. Zeeb AuthorDate: 2025-04-13 16:59:56 +0000 Commit: Bjoern A. Zeeb CommitDate: 2025-04-14 14:06:50 +0000 LinuxKPI: 802.11: deal with the error paths for lkpi_xmit() Rename lkpi_ic_raw_xmit() to lkpi_xmit() as we need a wrapper to add an extra argument as (*ic_raw_xmit) and (*ic_transmit) have different invariants. Based on the caller free the mbuf in the error case or not to satisfy the requirements of the caller. For more information see the comment in the code. Sponsored by: The FreeBSD Foundation MFC after: 3 days --- sys/compat/linuxkpi/common/src/linux_80211.c | 38 ++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index 73e1e7b1e1ad..fbbaf860c233 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -4514,9 +4514,20 @@ lkpi_ic_node_free(struct ieee80211_node *ni) lhw->ic_node_free(ni); } +/* + * lkpi_xmit() called from both the (*ic_raw_xmit) as well as the (*ic_transmit) + * call path. + * Unfortunately they have slightly different invariants. See + * ieee80211_raw_output() and ieee80211_parent_xmitpkt(). + * Both take care of the ni reference in case of error, and otherwise during + * the callback after transmit. + * The difference is that in case of error (*ic_raw_xmit) needs us to release + * the mbuf, while (*ic_transmit) will free the mbuf itself. + */ static int -lkpi_ic_raw_xmit(struct ieee80211_node *ni, struct mbuf *m, - const struct ieee80211_bpf_params *params __unused) +lkpi_xmit(struct ieee80211_node *ni, struct mbuf *m, + const struct ieee80211_bpf_params *params __unused, + bool freem) { struct lkpi_sta *lsta; int error; @@ -4534,11 +4545,8 @@ lkpi_ic_raw_xmit(struct ieee80211_node *ni, struct mbuf *m, if (!lsta->txq_ready) { #endif LKPI_80211_LSTA_TXQ_UNLOCK(lsta); - /* - * Free the mbuf (do NOT release ni ref for the m_pkthdr.rcvif! - * ieee80211_raw_output() does that in case of error). - */ - m_free(m); + if (freem) + m_free(m); return (ENETDOWN); } @@ -4546,11 +4554,8 @@ lkpi_ic_raw_xmit(struct ieee80211_node *ni, struct mbuf *m, error = mbufq_enqueue(&lsta->txq, m); if (error != 0) { LKPI_80211_LSTA_TXQ_UNLOCK(lsta); - /* - * Free the mbuf (do NOT release ni ref for the m_pkthdr.rcvif! - * ieee80211_raw_output() does that in case of error). - */ - m_free(m); + if (freem) + m_free(m); #ifdef LINUXKPI_DEBUG_80211 if (linuxkpi_debug_80211 & D80211_TRACE_TX) ic_printf(ni->ni_ic, "%s: mbufq_enqueue failed: %d\n", @@ -4571,6 +4576,13 @@ lkpi_ic_raw_xmit(struct ieee80211_node *ni, struct mbuf *m, return (0); } +static int +lkpi_ic_raw_xmit(struct ieee80211_node *ni, struct mbuf *m, + const struct ieee80211_bpf_params *params __unused) +{ + return (lkpi_xmit(ni, m, NULL, true)); +} + #ifdef LKPI_80211_HW_CRYPTO static int lkpi_hw_crypto_prepare(struct lkpi_sta *lsta, struct ieee80211_key *k, @@ -4929,7 +4941,7 @@ lkpi_ic_transmit(struct ieee80211com *ic, struct mbuf *m) struct ieee80211_node *ni; ni = (struct ieee80211_node *)m->m_pkthdr.rcvif; - return (lkpi_ic_raw_xmit(ni, m, NULL)); + return (lkpi_xmit(ni, m, NULL, false)); } #ifdef LKPI_80211_HT