From nobody Wed Jul 10 10:17:48 2024 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 4WJv1n1hQdz5Q91l; Wed, 10 Jul 2024 10:17:49 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4WJv1n0pzpz42g2; Wed, 10 Jul 2024 10:17:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1720606669; 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=51Dt9oiqTfjEodgM7inQLwOyA1EWExxTMCi4V2tLUFY=; b=l+A2Z/GxolVEg+qYFrYo+fsq7ubyvtE4ImUBkjDpPkCRzOChZDLF3Dg/9ChaSOa7vvIJdf X6snhlKXIQCUvyb8mR/m2ixscXVDJCen5ze1a4FmYzbWFDbdIv/1IoknUjlCzCORGDa6Pm Lg8xQroASwAtwYyrtZ0DBT7loInJCdx4ORv5+C/CNNBvnh3MAuYIxkVdEfAM3J9MwNJed7 UwMwzl/HcWsbxqG1Qf3wkTd+oSc5vpEO2BX+UgCb11n3cBAwMmei1fkeBzwPFNKHSKjBv7 b55J/Exbl6VEsV6YnYLGmQRgfVOF8WQ5lDE39vqaHfezTXxXL8WGVxpqH8z91w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1720606669; a=rsa-sha256; cv=none; b=ZRALjZoxnatyoW0AUW7DjXW2eSON9cQpDwjVXsk3pYnNh+vfzxtGCNRz42GnhRNR1xg3Jd oSMn1wwOchQaJNFcaUyzmLO12VuAAdICMHcfHsttK4wDgqveLNtK8xZa8RKXxbh4c8aLC+ 4XFrJF0JARXEyb+AMhprynCrTkhAjP8Uri60gXnQxs4R0wWb4j0pQeUJ/4213L/KuZ1e66 FSTrjqZ2XqCx/VW8fJFoF2K9HBTv3MXlAoMUSVo1EQmn8CfzQqcOLUit5GkSIApVdZ1p0t 51Y/Xffi53f1f1GpMsgvXXz4umH5rWUPkRHN1+GsgKWRyA8DjwfyPKCo5hQpWQ== 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=1720606669; 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=51Dt9oiqTfjEodgM7inQLwOyA1EWExxTMCi4V2tLUFY=; b=Dbyz4AOdUXmd8owE14/R8zo0fTLcDlk93dGSsBa/n9cZKAd5177DfToo0dXpUEJQCp9Es4 Hfw2JEHxOTyN+7lSDs2A3KbFcPSbr7HDM1/M/IpD2JPGR9RcFsB/JKvTmm4t4IpkD5pAfP AfpPufsqTi7rhQPeKuUMQfTMLw1YIQlyIVAbsd9IJEsQAhUKVsCoMTwakFkXc2Wh4EJSd5 mVlvd0C7re1DBH6UYFHnMP3hTFBolgE7abtSFBLckTLF+Y+4tSHTOo1NOLlHHJwG2E7d4e cwzSLQgjRw5ITVaGAAIJDLM99EG+QFHE1xz2S8ujcC0BT4aR6pkr6LSIXHRTgw== 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 4WJv1n0Qtqz1CkD; Wed, 10 Jul 2024 10:17:49 +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 46AAHmsJ070967; Wed, 10 Jul 2024 10:17:48 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 46AAHmVB070964; Wed, 10 Jul 2024 10:17:48 GMT (envelope-from git) Date: Wed, 10 Jul 2024 10:17:48 GMT Message-Id: <202407101017.46AAHmVB070964@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Zhenlei Huang Subject: git: e729e750806d - stable/14 - if_vxlan(4): Plug a memory leak 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: zlei X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: e729e750806d3873d5de24cce3b47cc054145985 Auto-Submitted: auto-generated The branch stable/14 has been updated by zlei: URL: https://cgit.FreeBSD.org/src/commit/?id=e729e750806d3873d5de24cce3b47cc054145985 commit e729e750806d3873d5de24cce3b47cc054145985 Author: Zhenlei Huang AuthorDate: 2024-07-02 04:57:02 +0000 Commit: Zhenlei Huang CommitDate: 2024-07-10 10:17:09 +0000 if_vxlan(4): Plug a memory leak On clone creating, either failure from vxlan_set_user_config() or ifc_copyin() will result in leaking previous allocated counters. Since counter_u64_alloc(M_WAITOK) never fails, make vxlan_stats_alloc() void and move the allocation for counters below checking ifd->params to avoid memory leak. Reviewed by: kp, glebius Fixes: b092fd6c973d if_vxlan(4): add support for hardware assisted checksumming, TSO, and RSS MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D45822 (cherry picked from commit 087f5e08ab5f0384163f76f73b9a91c98a3ba450) --- sys/net/if_vxlan.c | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/sys/net/if_vxlan.c b/sys/net/if_vxlan.c index 7a8cf7acae58..c6686c4868f9 100644 --- a/sys/net/if_vxlan.c +++ b/sys/net/if_vxlan.c @@ -368,7 +368,7 @@ static bool vxlan_rcv_udp_packet(struct mbuf *, int, struct inpcb *, static int vxlan_input(struct vxlan_socket *, uint32_t, struct mbuf **, const struct sockaddr *); -static int vxlan_stats_alloc(struct vxlan_softc *); +static void vxlan_stats_alloc(struct vxlan_softc *); static void vxlan_stats_free(struct vxlan_softc *); static void vxlan_set_default_config(struct vxlan_softc *); static int vxlan_set_user_config(struct vxlan_softc *, @@ -2924,27 +2924,14 @@ out: return (error); } -static int +static void vxlan_stats_alloc(struct vxlan_softc *sc) { struct vxlan_statistics *stats = &sc->vxl_stats; stats->txcsum = counter_u64_alloc(M_WAITOK); - if (stats->txcsum == NULL) - goto failed; - stats->tso = counter_u64_alloc(M_WAITOK); - if (stats->tso == NULL) - goto failed; - stats->rxcsum = counter_u64_alloc(M_WAITOK); - if (stats->rxcsum == NULL) - goto failed; - - return (0); -failed: - vxlan_stats_free(sc); - return (ENOMEM); } static void @@ -2952,18 +2939,9 @@ vxlan_stats_free(struct vxlan_softc *sc) { struct vxlan_statistics *stats = &sc->vxl_stats; - if (stats->txcsum != NULL) { - counter_u64_free(stats->txcsum); - stats->txcsum = NULL; - } - if (stats->tso != NULL) { - counter_u64_free(stats->tso); - stats->tso = NULL; - } - if (stats->rxcsum != NULL) { - counter_u64_free(stats->rxcsum); - stats->rxcsum = NULL; - } + counter_u64_free(stats->txcsum); + counter_u64_free(stats->tso); + counter_u64_free(stats->rxcsum); } static void @@ -3234,9 +3212,6 @@ vxlan_clone_create(struct if_clone *ifc, char *name, size_t len, sc->vxl_unit = ifd->unit; sc->vxl_fibnum = curthread->td_proc->p_fibnum; vxlan_set_default_config(sc); - error = vxlan_stats_alloc(sc); - if (error != 0) - goto fail; if (ifd->params != NULL) { error = ifc_copyin(ifd, &vxlp, sizeof(vxlp)); @@ -3248,6 +3223,7 @@ vxlan_clone_create(struct if_clone *ifc, char *name, size_t len, goto fail; } + vxlan_stats_alloc(sc); ifp = if_alloc(IFT_ETHER); if (ifp == NULL) { error = ENOSPC;