From nobody Mon Jun 6 11:45:54 2022 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 A74401BDD843; Mon, 6 Jun 2022 11:45:56 +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 4LGsBW3f6Kz3CZK; Mon, 6 Jun 2022 11:45:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654515955; 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=vJRHuhg/wf3nxUYcaFc0hMbdZzicag9En4lSt/ZIlkk=; b=N1s7aG3miI2mLHdfKZvFyyd2n4tFMkKc4x20hnHopprTUt4rxp+UAbiq5y0bYhtriGIfUN FDKOV4doJwOwlR3KbLpLP5A2oIOhXQj0rKwI5gc3yPORlMqX7Mz/+yJpyyXc98uPu03vOD wVEN9fCyASnjyc4r2VLUug/EjPU79gn7kq5jr9Y1rVSuh7WWSKPkljSTbrnS3BqIlDgZfm TZ0e2GWUqZMV4JLm8Dbj/wwNOsu4dJ9kRnsh6ihagUQJHjuTWjM9I/QUB+eXx/Ru/dsX5p 5vsbgqzCmbKzpBbMvRrf2+ToCNBhWFG7S/5+YPxe7Le1StEnfRUws+FoNFrUgQ== 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 2A31D2536C; Mon, 6 Jun 2022 11:45:55 +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 256BjsgP054073; Mon, 6 Jun 2022 11:45:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 256BjspZ054069; Mon, 6 Jun 2022 11:45:54 GMT (envelope-from git) Date: Mon, 6 Jun 2022 11:45:54 GMT Message-Id: <202206061145.256BjspZ054069@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kristof Provost Subject: git: a015500ef39e - stable/13 - pf syncookies: fix 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kp X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: a015500ef39e9732b342f831e0edbeade850707f Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654515955; 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=vJRHuhg/wf3nxUYcaFc0hMbdZzicag9En4lSt/ZIlkk=; b=SDBk7ASdJRVUR4TAWE2Z4s7apcjaRU7vU8FyKEd+LuKVy9/RNBZVwSJZe1M+mVIlz/NMfj 34i9Wgm9kdmDLED794fi+kzfmZkaW8/sWkMHUwpK+2CLTxudsgQo/mARvITi9GFg5hpmpg /jBKYjBhC5xw2vl4SOKW88UFtDMJbbrqEFyU1wWl8AEN9Ku1Ap4h6LPVBNS2HLl8yRJomE xRJ2qdTmYfI0vU/rKYK5U7ze8RtZ2o+A94Ac66qyxZk1s59Y1yJvGRAYz/JOixjTChErLw v9d/HhD4V6XZE6ZrnZVxT82ZRevfl8ddMBVJnsBcF9098JwH47zUx5CthOSA7w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1654515955; a=rsa-sha256; cv=none; b=tGXADD8RVGTS6msLddhGXB05wu4WocvckY3OYKEa8rS3AJXp1QY3w9wTmDlf+vubcNweIT Bs/y0p51yX1Ucj4otQRM6ElHbl2p3q7EQnnSa+Nq24Xv05n3uyMxezDKqKvwkOOAyqDqGF Oa4Ju43rXevtFWvmii5DLvDOBCo5/j5AMcw+7Pmx/pDxaGZ+t6jVMIPPp1rfM/y2vrrUPa ebILhEC9Pdv3rGuzOtnMfjsIhwTEWTD7TDmmtNTIMQCEEvUTXaZW115C/kH0FrM4IeSf7Q x4vuFMm38TxqIMYnE2l4nFZXfmhy83Km83zJyMiLHL0OFVP6M5ugA6zgwtlusw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=a015500ef39e9732b342f831e0edbeade850707f commit a015500ef39e9732b342f831e0edbeade850707f Author: Kristof Provost AuthorDate: 2022-04-07 06:41:37 +0000 Commit: Kristof Provost CommitDate: 2022-06-06 07:01:00 +0000 pf syncookies: fix memory leak We forgot to free the nvlist (and packed nvlist) on success. While here start using the ERROUT macro to clean up error handling, and to add SDTs for better debugging. Reported by: Coverity CID: 1473150 (cherry picked from commit be461cdfb36e229040aafae07a2ba68f73091431) --- sys/netpfil/pf/pf_syncookies.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/sys/netpfil/pf/pf_syncookies.c b/sys/netpfil/pf/pf_syncookies.c index 32b2bec6c3d6..5230502be30c 100644 --- a/sys/netpfil/pf/pf_syncookies.c +++ b/sys/netpfil/pf/pf_syncookies.c @@ -141,10 +141,13 @@ pf_get_syncookies(struct pfioc_nv *nv) { nvlist_t *nvl = NULL; void *nvlpacked = NULL; + int error; + +#define ERROUT(x) ERROUT_FUNCTION(errout, x) nvl = nvlist_create(0); if (nvl == NULL) - return (ENOMEM); + ERROUT(ENOMEM); nvlist_add_bool(nvl, "enabled", V_pf_status.syncookies_mode != PF_SYNCOOKIES_NEVER); @@ -154,21 +157,23 @@ pf_get_syncookies(struct pfioc_nv *nv) nvlist_add_number(nvl, "lowwater", V_pf_syncookie_status.lowat); nvlpacked = nvlist_pack(nvl, &nv->len); - if (nvlpacked == NULL) { - nvlist_destroy(nvl); - return (ENOMEM); - } + if (nvlpacked == NULL) + ERROUT(ENOMEM); + if (nv->size == 0) { - nvlist_destroy(nvl); - free(nvlpacked, M_TEMP); - return (0); + ERROUT(0); } else if (nv->size < nv->len) { - nvlist_destroy(nvl); - free(nvlpacked, M_TEMP); - return (ENOSPC); + ERROUT(ENOSPC); } - return (copyout(nvlpacked, nv->data, nv->len)); + error = copyout(nvlpacked, nv->data, nv->len); + +#undef ERROUT +errout: + nvlist_destroy(nvl); + free(nvlpacked, M_TEMP); + + return (error); } int