From nobody Sun Dec 11 16:41:47 2022 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 4NVVs8151lz4jfKc; Sun, 11 Dec 2022 16:41:48 +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 4NVVs80cgCz3Jth; Sun, 11 Dec 2022 16:41:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1670776908; 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=waKI1nvXafPKjIsgk8HmB4pajtj6tlbMSMXTZjzqMI4=; b=x0rpH5ItW5kuvD872Ls/Iq122h85dEeGklXZ55mltv33uCaG7o9+UCHkvcleF4pmAXwGql Bdooc2pv3/NDongpExYMTxCQccHomp/rNI198coJJTj66TIqFNWKQ/dcn/zapcakP4EFWV wqyHElS0a/UiD3MjB8E6mAf+6QJ/RGXwNV//jII8pKiVj8tHOBvPJj5GJU/eWFkJXYbMP9 vlpJ1ICJ5j+PVcbmeCNCLNoq1q+WCJjBcrYuxTeIU/0nAydQb5/m+ae8+IwuBu84YXvwMd WqWcbtIf43/kcqu0XXYNmGOzFVjB31ZjCkb4MclTnu3x6OFO3iYwEoj+Ef8tTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1670776908; 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=waKI1nvXafPKjIsgk8HmB4pajtj6tlbMSMXTZjzqMI4=; b=YX+iMxgmJoWHM+yK/5xlwUvajaj9O4WZ3nQW0FVYZIzz8KGtaBx8UKNagrhzdxPwQg2dKJ I4d//wAqlUkYYl3LZ1EtC4B+5bQoJQPLUkkyIjuXCKbasTP6b47gaKq2e6XdRli9/1NF0g rU3/bYwns+Ltf7mzIyZh+0raB762qqezOwQRdJksAY+d0UW80BhbL04brl0CQmu0Vv6377 cvCwjDrYycLTUo3g5gGsj36qGg/iyD/wHqfUf8M31mK5FqgXg1EhCvSBnAAlf39hNx9lxx NqsKXsy3NXyJye9hT0wNefd0+wyRYbk/d25GDHJWWoImt/lDeea0np3lZ0uCKg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1670776908; a=rsa-sha256; cv=none; b=ZjOpGUzJsJLBCRJLR8q1ISMAv7S6s/D4vNpToMpr8k4JcRJkdLEO+I2Z71l5uO6SYF2sJl 3oxzGjIIrHFcUpmNdyeAVRRKSIg+EvaEMABFp3i0EfoWN6SiGreYGrsQrAuqZLe4mkZwKJ SqPGXC977kQk3VeV7mvA2o+xcsHAcGe4I6JJ79NVlHBnXGF+TklpmZ1Uf2ytCEZEohBKJh QaLKC40xk9H0VKH2D1qHUWw+qJ5KWaVmKCOXHvfpMjP5euVJYukr96UG7/+/vwCOCzipln 4+TgMYfG6JkVcyksopW3PbVwbj7heAfzPKM5tJJpAv17sMJHj/v4++hWzw4a3Q== 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 4NVVs76pvFz12N9; Sun, 11 Dec 2022 16:41:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2BBGflde095040; Sun, 11 Dec 2022 16:41:47 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2BBGflh9095039; Sun, 11 Dec 2022 16:41:47 GMT (envelope-from git) Date: Sun, 11 Dec 2022 16:41:47 GMT Message-Id: <202212111641.2BBGflh9095039@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 51088797305c - main - bridge: Fix a potential memory leak in bridge_enqueue() 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 51088797305c8aba43e8ded60b99eef5baa14071 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=51088797305c8aba43e8ded60b99eef5baa14071 commit 51088797305c8aba43e8ded60b99eef5baa14071 Author: Mark Johnston AuthorDate: 2022-12-11 16:40:12 +0000 Commit: Mark Johnston CommitDate: 2022-12-11 16:41:12 +0000 bridge: Fix a potential memory leak in bridge_enqueue() A comment at the beginning of the function notes that we may be transmitting multiple fragments as distinct packets. So, the function loops over all fragments, transmitting each mbuf chain. If if_transmit fails, we need to free all of the fragments, but m_freem() only frees an mbuf chain - it doesn't follow m_nextpkt. Change the error handler to free each untransmitted packet fragment, and count each fragment as a separate error since we increment OPACKETS once per fragment when transmission is successful. Reviewed by: zlei, kp MFC after: 1 week Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D37635 --- sys/net/if_bridge.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c index e8e552aa1853..5c3ce137931c 100644 --- a/sys/net/if_bridge.c +++ b/sys/net/if_bridge.c @@ -2062,8 +2062,13 @@ bridge_enqueue(struct bridge_softc *sc, struct ifnet *dst_ifp, struct mbuf *m) M_ASSERTPKTHDR(m); /* We shouldn't transmit mbuf without pkthdr */ if ((err = dst_ifp->if_transmit(dst_ifp, m))) { - m_freem(m0); - if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1); + int n; + + for (m = m0, n = 1; m != NULL; m = m0, n++) { + m0 = m->m_nextpkt; + m_freem(m); + } + if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, n); break; }