From nobody Fri Apr 08 16:10:24 2022 X-Original-To: dev-commits-src-main@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 0DD6C12BA860; Fri, 8 Apr 2022 16:10:25 +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 4KZjrw6x13z4qQr; Fri, 8 Apr 2022 16:10:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649434225; 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=P3PPlqxf2VJyk6olGcjPb00aJAfToRLIe74WbYUDN+I=; b=CVJ4uqO8EnIpV7QR9dKHLlv++bASRdV2XLYZTdSCG4+8kQi676TECj5tdxzC5jDfmr1DOt 4+4QrZoYbJlJEYuncSEe6bc/583QnwzR4l27QROCoieUoRScpAl3bwYO/SnFBMAnOlLWD+ Mqr7AzIAsIKe4l6JB4ZJmTZAKDZU4N6hsUvGZh2dF1jcf5cnmAl1EkWQ1L0jJPD5QJaln7 kQ9eD8RSggnW5x8ZREaQ+kfNeBUnhccEsiL3FtouiQDUiyzNx8N9Vq1/BzU6ZeFyQ91zPl F6ig7Ky5vJrR6vpS/nU8QL0zmD07oztpBfoquAYkd2IUZWMv6XrRfJIf1aRrYQ== 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 CD8AB21C; Fri, 8 Apr 2022 16:10:24 +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 238GAOPV092091; Fri, 8 Apr 2022 16:10:24 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 238GAO9V092090; Fri, 8 Apr 2022 16:10:24 GMT (envelope-from git) Date: Fri, 8 Apr 2022 16:10:24 GMT Message-Id: <202204081610.238GAO9V092090@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: dd91d8448665 - main - net: Fix LLE lock leaks List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: dd91d8448665dd31df5be7341756394293c6e36c Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649434225; 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=P3PPlqxf2VJyk6olGcjPb00aJAfToRLIe74WbYUDN+I=; b=icIx7PLSXffyg8EExUnhse8Xo1+1x8DoF/zZEP5Ody1UDXmcdzQI2HfdjfkU7Be4iM0pjv 3VEWRkZeTLz2ZP5UFiAbOyAiT+vS8kTfQRyIN1DnARVMRR43xpvopJRAJ6HZjWUtXRKpYf MSf7irpAT7N4EQ7oK8YzwLAwDbhEnYlborajGPmc8PUUFxK+8fDAiVyUdKi5JutJrCcMC3 Z52CUNgQ+lRwG+lJ7avi7gt3TXnFrerjcW/0JBz9Af5dJL2HcGY3QVolVPLqtk3GHYe5oN h3RcIh7IFP12IKO0eSh2DOoMvMalvd4yu/0hyGpl9kSDpE+Mlr/75pzFAUpSAQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1649434225; a=rsa-sha256; cv=none; b=PPC6YQJLH2OGhDVx7Eu8MkDbE7SNYDFQLjrNBlSfkULNm+c/pFhISmWtAzsL5JEzQO92rl 6kCJtaQhXAYw0X0+6/FxD8dtBShms6q/Go5S4yF2pw7JrdgJJ+P91B9zjC/YfP725KpA3D NmB7CfCVhuJB11mXYdXAF3NCj66asaqHKGlxgSRaecg15PFaWSbyLdonrp6R4UwQems5zs nbiv7EdO4TF8UQaJ5g70/iF5Ol3Gppqn5yAmaQ/s95CEgZ4Mczt4i6A2w9R+P3HGKJ1Qav fZWp4UESIi1EF8syelDT0Pwb/pK4x+SkJSaBvh3wcaF5Z7qyzryRTKsw5qsQNQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=dd91d8448665dd31df5be7341756394293c6e36c commit dd91d8448665dd31df5be7341756394293c6e36c Author: Mark Johnston AuthorDate: 2022-04-08 15:46:19 +0000 Commit: Mark Johnston CommitDate: 2022-04-08 15:46:19 +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. Reviewed by: bz, melifaro Reported by: pho Fixes: 0b79b007ebfc ("[lltable] Restructure nd6 code.") MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D34831 --- 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 f54df9937936..fd0423858bb8 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -1228,16 +1228,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); }