From nobody Fri Apr 15 14:21:30 2022 X-Original-To: dev-commits-src-branches@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 C9D558D73B9; Fri, 15 Apr 2022 14:21:30 +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 4Kfz624wtLz52jK; Fri, 15 Apr 2022 14:21:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1650032490; 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=BZbvgRKoJNq59s6T2iLr1vElFWnkKAiWXPrNkxdHdoY=; b=f0lEpx07/ALNfRsTT7PGZNYDqGnWyg/xPH5unZ+GFfjYqD+h59o83lWnzRpiEo7VQoVhmU xedLaCt/TUa+lyLNcFcmG5jL3+NLbUNn7AQ+8fgUila0zssXeUn17rmGHk56Jh3pM0nx5K UErXDz4uivskBFhZVd8gOKDtWTzWYs/vaZanuRZUVHLt0J0pIesw0camvnnXubf4cSq1XB 3m3al1arZi5qtyMoYfrjLdoV52Hq/5zuS8RtFREYxPYeQXwXwpF981yaYEmGcUoADNUG97 ZX4ocIJkW+7I0D/1nqzHLfa7wrXqJTSKQPnjiJQwfYg8higglNgwPQWYBI23Tw== 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 8984316C93; Fri, 15 Apr 2022 14:21:30 +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 23FELU0o062802; Fri, 15 Apr 2022 14:21:30 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 23FELUeF062801; Fri, 15 Apr 2022 14:21:30 GMT (envelope-from git) Date: Fri, 15 Apr 2022 14:21:30 GMT Message-Id: <202204151421.23FELUeF062801@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mark Johnston Subject: git: 421c2f93a4e0 - stable/13 - net: Fix memory leaks in lltable_calc_llheader() error paths List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@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/stable/13 X-Git-Reftype: branch X-Git-Commit: 421c2f93a4e03da9c6ed36913916b15c170949e6 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1650032490; 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=BZbvgRKoJNq59s6T2iLr1vElFWnkKAiWXPrNkxdHdoY=; b=YA2wcN8VX9ydjaL1+OGkgUu98UD0FPm3ElB4V7KjKf2/5blqtgRtSLJlkpLcn6Li5dd1pH /Oy8qQspsR8z10eOYvD4JXYzgJl8RZlGMWrl/BvTzHUGxosFFjW2PUOtiv1yl0KTu9bleC RC4SA0B3bSiE7WER/QOH8s16CMCAuNoWngXxnBGMa1j1RimBuPjPK3Sqfa5JWNRbfGnVlJ oIbiVrL6Tv1vY5NxwdHn6mR0fvtBiNppqyJon1CVP7qppVwzGIIMIkLQlwuLjSf76jPhRF /HYKvRc+N4fInScmM/Nn7AUb1R6/PtmI0YU40820Eun3geRBcOSVHSax3z9lgg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1650032490; a=rsa-sha256; cv=none; b=wSSGSSpXubFdyrPaFtusUjFnHzyMXrosxWgSyljOk0I9C3hZEQj5rtLe73uVHgKYXAw3Oq f9N97Yw6cErPj9RWo8izoDNtYpGjOLgqbjIMnFUH0Noo1VFylwBBRqfkaT7/nsdKc1lk9u hC1uF1lKpoWff5ZIAuy3GCmAyxw7gFoMaHoFglghKOKhOdGm2GNk3xu/HFyOfDNqTlsUvd x9ezIJ0OxYGcKaS7KnN4HWmwhL36XgiEJ2w/eKI6tdnTbRbS7Mbw7ENXZzPSCkPJFLRMx6 rGXMxEdez3PhmahX+yk73sAsR60apRriiFCUtWw5kx9Z5eT/2qAzMd2vOl3m9A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=421c2f93a4e03da9c6ed36913916b15c170949e6 commit 421c2f93a4e03da9c6ed36913916b15c170949e6 Author: Mark Johnston AuthorDate: 2022-04-08 15:47:25 +0000 Commit: Mark Johnston CommitDate: 2022-04-15 14:21:20 +0000 net: Fix memory leaks in lltable_calc_llheader() error paths Also convert raw epoch_call() calls to lltable_free_entry() calls, no functional change intended. There's no need to asynchronously free the LLEs in that case to begin with, but we might as well use the lltable interfaces consistently. Noticed by code inspection; I believe lltable_calc_llheader() failures do not generally happen in practice. Reviewed by: bz Sponsored by: The FreeBSD Foundation (cherry picked from commit 990a6d18b0cb1eee9e18a4220150d549b9bee753) --- sys/net/if_llatbl.c | 4 +++- sys/netinet/in.c | 2 +- sys/netinet6/in6.c | 2 +- sys/netinet6/nd6.c | 4 +++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sys/net/if_llatbl.c b/sys/net/if_llatbl.c index b82bc9fc104c..d2fb58974d3f 100644 --- a/sys/net/if_llatbl.c +++ b/sys/net/if_llatbl.c @@ -926,8 +926,10 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info) linkhdrsize = sizeof(linkhdr); if (lltable_calc_llheader(ifp, dst->sa_family, LLADDR(dl), - linkhdr, &linkhdrsize, &lladdr_off) != 0) + linkhdr, &linkhdrsize, &lladdr_off) != 0) { + lltable_free_entry(llt, lle); return (EINVAL); + } lltable_set_entry_addr(ifp, lle, linkhdr, linkhdrsize, lladdr_off); if ((rtm->rtm_flags & RTF_ANNOUNCE)) diff --git a/sys/netinet/in.c b/sys/netinet/in.c index 2303a8f10aa4..92b9c229ea5b 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -1554,7 +1554,7 @@ in_lltable_alloc(struct lltable *llt, u_int flags, const struct sockaddr *l3addr linkhdrsize = LLE_MAX_LINKHDR; if (lltable_calc_llheader(ifp, AF_INET, IF_LLADDR(ifp), linkhdr, &linkhdrsize, &lladdr_off) != 0) { - NET_EPOCH_CALL(in_lltable_destroy_lle_unlocked, &lle->lle_epoch_ctx); + in_lltable_free_entry(llt, lle); return (NULL); } lltable_set_entry_addr(ifp, lle, linkhdr, linkhdrsize, diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index 41b05ae2ca53..b0a8c1608b6c 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -2304,7 +2304,7 @@ in6_lltable_alloc(struct lltable *llt, u_int flags, linkhdrsize = LLE_MAX_LINKHDR; if (lltable_calc_llheader(ifp, AF_INET6, IF_LLADDR(ifp), linkhdr, &linkhdrsize, &lladdr_off) != 0) { - NET_EPOCH_CALL(in6_lltable_destroy_lle_unlocked, &lle->lle_epoch_ctx); + in6_lltable_free_entry(llt, lle); return (NULL); } lltable_set_entry_addr(ifp, lle, linkhdr, linkhdrsize, diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index 6a9e2a4fdd7c..69da61aa9c5c 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -2036,8 +2036,10 @@ nd6_cache_lladdr(struct ifnet *ifp, struct in6_addr *from, char *lladdr, if (lladdr != NULL) { linkhdrsize = sizeof(linkhdr); if (lltable_calc_llheader(ifp, AF_INET6, lladdr, - linkhdr, &linkhdrsize, &lladdr_off) != 0) + linkhdr, &linkhdrsize, &lladdr_off) != 0) { + lltable_free_entry(LLTABLE6(ifp), ln); return; + } lltable_set_entry_addr(ifp, ln, linkhdr, linkhdrsize, lladdr_off); }