From nobody Mon Jun 6 11:45:52 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 499F31BDDB05; Mon, 6 Jun 2022 11:45:54 +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 4LGsBT1TCPz3CNb; Mon, 6 Jun 2022 11:45:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654515953; 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=oft29EOFj16JqPIpzfttDu9H7rKYMkFhXV1jflhmafk=; b=vUNckSsa8jGbmrdn3SymOb9anEoV9XmLSYyiPwN3+6WXxClAUFsxmU/7nJZdNSbzBLTsUb hl9zeHkNTKGmImUsWjV3A9sAisN8g4te3tVUlf2VAN0p6X3mbKRjCzATCAuVGNkj3p0LQB VPRntN+rgC6OwxMo9CsU6m6ZgTATQyUEdinkhH9G6G8HzNKorQYp5rDtDNB/qJ0Hd2dzO9 jpdCowQgajIKpaOjB7k2Icq8ahPWuTkkDIJpE8NHKWKtssFV3QAAjr/b4GEz7COgs0wIBt 5HiSFG8D2RXsroxcA7IoS1Csf87oINaYjz5W5fbikHF2QBoNMQ87Phapbotvog== 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 D84EB2569E; Mon, 6 Jun 2022 11:45:52 +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 256Bjqri053945; Mon, 6 Jun 2022 11:45:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 256BjqRh053944; Mon, 6 Jun 2022 11:45:52 GMT (envelope-from git) Date: Mon, 6 Jun 2022 11:45:52 GMT Message-Id: <202206061145.256BjqRh053944@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: 1d132ca5640f - stable/12 - 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/12 X-Git-Reftype: branch X-Git-Commit: 1d132ca5640fbe3db13b3532d85b6fdb1cefa8d4 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1654515953; 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=oft29EOFj16JqPIpzfttDu9H7rKYMkFhXV1jflhmafk=; b=wQldJ9cikFscxe9DrgvSB+RwJ3khcgRFBFg1KSsU7vXC5yja8PpWzOWP3QeHQ5MTLSLWvt haiv1AI3pekJXSsGPLWrT21jI5LWfK8b9N8rOQ5WquTvEOWeOQXtdtob5285NSNFZW2bbM rms/trOwljy5iMlJBMgF6VDdftCJ3pLssLdQfjrMqV45Di3DIa63zHfAwGE3Wr/+5NFfyY l5GU+PK2N7rB4u3gmcnTFqzeedIzPQQKUppJCmcJ1LLBjWrpA4JTkaAuxoODgWOZlAtB5r 7bKVYWyMIX99GFAPkQX7QpF2cm76eW6t9BHPv0XbCur4n13EW6euhJoW9xY1HQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1654515953; a=rsa-sha256; cv=none; b=QD4n9jwe+GTSv2vicpoA7qY7+xvwFAtEizzvbwnWgxqGknN0qO+pSSKfh0hE+rF9XUTZKW mbkzV+tbKpsG5atQ+q4I/gDk1zTODE+RjP2t8DqZJAK5NGg3U1igunAK637qAL3fiR2zcq 6DvwLjZnNZoa7ncT6lA6Wpf1/TsPTXWvrbRPoISVgFsrJeHaFO0Te44alGfNjygJf2V/Zb ETqJWrtc4PxHEoBmdh2lJhOEdnCw3JQkku9++vtMVz7JzCNDp8yOOv98IOqUdwRbzVBTS0 F/upfd3lECzeY0d4myWJzObWDA6LiS2fIAUlmrOToJEbPk0w2/4HBNQoI4Y/TA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/12 has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=1d132ca5640fbe3db13b3532d85b6fdb1cefa8d4 commit 1d132ca5640fbe3db13b3532d85b6fdb1cefa8d4 Author: Kristof Provost AuthorDate: 2022-04-07 06:41:37 +0000 Commit: Kristof Provost CommitDate: 2022-06-06 07:01:43 +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 8fdc96e31e98..a3cc6650bbce 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