From nobody Mon Apr 11 14:10:50 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 0A4AF1A98D4B; Mon, 11 Apr 2022 14:10:51 +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 4KcW3Z2y36z3JkP; Mon, 11 Apr 2022 14:10:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649686250; 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=3x5tcM2biBoULTT8qztTh23SZ/fzyqo0pfrGX4DRsbI=; b=g27Od48235shNqkBqaZ2Yxr/HHP66BIaxrwhr9z34cpMIpwSBSv0Lt/cTcEkqrURVLyvz7 4n+PP6QRtdDNOabBRYXN9MuZTrQhAVIg4/AVli1x9Uu2kyIqtWjggHJ0EWJLUnwmXd5nHL 7g5SNGO+0w5rzs39sh4lgcYo5LDLBcZRxLuS8xylPAkyft32g4xEtP7gHm4EMc3Z85Bu8H 4Oxc5KW2bkCUYEhM7D11zd/W+GR0mAy0jHkWs/5AUNzSdl4pvDycqbvRNWGAzT7ZNxf6o2 8+sjcVN2nMMV1qG9jZ9MzAKZNw7utaSlEKHvIOxKROkkOxvgy10MHvWD4gZKNg== 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 304B5241EE; Mon, 11 Apr 2022 14:10:50 +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 23BEAoW2065216; Mon, 11 Apr 2022 14:10:50 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 23BEAoGP065214; Mon, 11 Apr 2022 14:10:50 GMT (envelope-from git) Date: Mon, 11 Apr 2022 14:10:50 GMT Message-Id: <202204111410.23BEAoGP065214@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: 53460a2c7e0e - releng/13.1 - net: Fix LLE lock leaks 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/releng/13.1 X-Git-Reftype: branch X-Git-Commit: 53460a2c7e0e07d4a18025ab4a0d151c5be6fa18 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649686250; 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=3x5tcM2biBoULTT8qztTh23SZ/fzyqo0pfrGX4DRsbI=; b=iTs7bbD33y/uJtvkGgVIzeX2ucm3lMxE1VDdt8KPU6EWWoAbXcaJtoihC3vAwKVVDi54T1 CRtFMDrpRQkFSqo7ntL6O3nQTREBfg21QQi8vjPqssJEpUkJzA1GPTNvSSzbKK+yxG/kBG SiQfaDsA+BgjpTi+BnCzQ/ukSRzu0MTctV12cwHlf+tA4azgAZ5inzAXbpjY/n0EorWR6H 0dosTAPLmKFPfhYnaf9+qC/FM3ERc/eCSPFdiwvAULvawae9ulNssI36c+pqoIXT0lbRdX ET2/ismKkGecCiys+0e36OEwYjiQMHxDq6pFI+5hRe3/9MFAh9yfodV6F3r9tg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1649686250; a=rsa-sha256; cv=none; b=Cp21UTzUpjrEVfkKXS3KZlF9524FYHlUz/q2ac57nKKy/RpMCS2P5UV06ImBJbSTL9OXwX eQpFflE+jPeqjvsG8B5ffjHa4jiNmwEFISe5AlgjaA/vv6lVJ/OKQqbrmYMWttRbo/YEqH WMLHcG1NS/sjR59rOuiFaPN71D6GdlB+MkMyDJTYo645A5XHX34fk4PE/ZzuHMGrfGBouZ KR/fmmPprhyY2fndf5bqKYWiUao0QG1qUMdtb5pTBxD5LYGosos5PFm+6qLPXWj5vmj2/6 5t49JfVuAj2cy1PYyp8OkX3ijOEKl0wdjJAblE25Uk7ss3pC1/iYDb6KxQpsXA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch releng/13.1 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=53460a2c7e0e07d4a18025ab4a0d151c5be6fa18 commit 53460a2c7e0e07d4a18025ab4a0d151c5be6fa18 Author: Mark Johnston AuthorDate: 2022-04-08 15:46:19 +0000 Commit: Mark Johnston CommitDate: 2022-04-11 13:59:21 +0000 net: Fix LLE lock leaks Historically, lltable_try_set_entry_addr() would release the LLE lock upon failure. After some refactoring, it no longer does so, but consumers were not adjusted accordingly. Also fix a leak that can occur if lltable_calc_llheader() fails in the ARP code, but I suspect that such a failure can only occur due to a code bug. Approved by: re (gjb) Reviewed by: bz, melifaro Reported by: pho Fixes: 0b79b007ebfc ("[lltable] Restructure nd6 code.") Sponsored by: The FreeBSD Foundation (cherry picked from commit dd91d8448665dd31df5be7341756394293c6e36c) (cherry picked from commit 078d50f9dd14ac77145b2cf8f143d49329b2c4f7) --- sys/netinet/if_ether.c | 8 ++++++-- sys/netinet6/nd6_nbr.c | 4 +--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index 5400f35d953f..59a7c78cb03b 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -1239,16 +1239,20 @@ arp_check_update_lle(struct arphdr *ah, struct in_addr isaddr, struct ifnet *ifp /* Calculate full link prepend to use in lle */ linkhdrsize = sizeof(linkhdr); if (lltable_calc_llheader(ifp, AF_INET, ar_sha(ah), linkhdr, - &linkhdrsize, &lladdr_off) != 0) + &linkhdrsize, &lladdr_off) != 0) { + LLE_WUNLOCK(la); return; + } /* Check if something has changed */ if (memcmp(la->r_linkdata, linkhdr, linkhdrsize) != 0 || (la->la_flags & LLE_VALID) == 0) { /* Try to perform LLE update */ if (lltable_try_set_entry_addr(ifp, la, linkhdr, linkhdrsize, - lladdr_off) == 0) + lladdr_off) == 0) { + LLE_WUNLOCK(la); return; + } /* Clear fast path feedback request if set */ llentry_mark_used(la); diff --git a/sys/netinet6/nd6_nbr.c b/sys/netinet6/nd6_nbr.c index 0c6dd9e0361f..3a56964f8eb3 100644 --- a/sys/netinet6/nd6_nbr.c +++ b/sys/netinet6/nd6_nbr.c @@ -855,10 +855,8 @@ nd6_na_input(struct mbuf *m, int off, int icmp6len) linkhdr, &linkhdrsize, &lladdr_off) != 0) goto freeit; if (lltable_try_set_entry_addr(ifp, ln, linkhdr, - linkhdrsize, lladdr_off) == 0) { - ln = NULL; + linkhdrsize, lladdr_off) == 0) goto freeit; - } EVENTHANDLER_INVOKE(lle_event, ln, LLENTRY_RESOLVED); }