From nobody Wed Aug 24 13:59:22 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 4MCSQ24QxBz4bFMJ; Wed, 24 Aug 2022 13:59:22 +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 4MCSQ23Swnz3x2d; Wed, 24 Aug 2022 13:59:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1661349562; 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=sa9t51BmdX8Uee68rExoqoQSwMnCr5xYU7HXMXF1gf4=; b=saaAfyTlUZMu0sc7tRp3mal8mZfzwRGV4VvSR23stNGFVfS2VDbR3XBl9gQ8PCxrqoC2xw gIG1oBJDtwA2UP5vRMC7hLx8NU83dQ1UHz2j8UOrDp2cPgpsomsou026qu3sREcFmeXC2g qNR3yRQjoVIOKJdEo59Ze2wP6mFtl45u4YL/56LaSHSytiCld2SG+9/y/k4D7euUYx0tD6 EyHoZXEOnI1CI0dg967C+7/deFdTD+LHDCrloI/M0IJsC2B/lR8EEzwXJocNSv38pkoM6H pB8Of7PnzMMXWJgLFSRbC9pDSaRVX5ZIZzIg/5qjB0OANosk3nm1WDhOdaG8Xg== 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 4MCSQ22H6Rz1B8m; Wed, 24 Aug 2022 13:59:22 +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 27ODxMIL003012; Wed, 24 Aug 2022 13:59:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 27ODxMVb003011; Wed, 24 Aug 2022 13:59:22 GMT (envelope-from git) Date: Wed, 24 Aug 2022 13:59:22 GMT Message-Id: <202208241359.27ODxMVb003011@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Alexander V. Chernikov" Subject: git: 8036234c72c9 - main - netinet6: fix SIOCSPFXFLUSH_IN6 by skipping manually-configured prefixes 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: melifaro X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8036234c72c9361711e867cc1a0c6a7fe0babd84 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1661349562; 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=sa9t51BmdX8Uee68rExoqoQSwMnCr5xYU7HXMXF1gf4=; b=QZucP8lX0AwxZ8ewoOMjqY22p0B3aL4ivdbRdfKeVTCkHFIitBS7gzStRr8EaCP4tSrNCq Qx34f+aG7Sw5IEMMRTNDAIJYIaQhxG2n471+lYb6m6HvXLOf4OiWHnXlx0S/xVX0lG97Rw FVvnkFTCpevKIJrUHMxTBBhCvFNMccLsGG3g7xfS4oKnNAXSWtVdj+nmx+jS6FM2QyBdMX O3BevCS2gTxpX2hu5qVYz6Bx/CIC0nxLLmJTk0JDa3GC01WE1kV2k2BMUCANXG1UE077kM cNP5fxIlfnyUFdjr0dcKf/Q6wQSxRpZHJk1Z2vUOrnMey+Q0XWu4aTIGhXGS5A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1661349562; a=rsa-sha256; cv=none; b=NZnDpJ6F8oqTGcCjXsgrG7UQsKmHtK3mur7Cxk21pnlYgMfpb7zIDNT5E6Up/L/uam1nFt uAwdDRC9B5vJ+4T2lONbMo24SU/wPKz6zs6UjCS1Jbk4mDentL/4YNqBVJOBvCnAHh9jxz l1IIdjPL1fKQpQUKCZvU9TIghfNZKD2isO7lbghC9GgPLJQgDb5lD/4BI/f6ZvvYYGDK0i ugLd64aB7ia43uo/2pym7ZGWD+BAB/PlGJnnMYpQBFhAvVdwJkTz5S3e+epw9gz86FURRO EtfCEphpDu2Ilfk2D1uJGo2S9xKB9cBHPSNtJ/gv30DrC35MHf1Hhgad/9eBOA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=8036234c72c9361711e867cc1a0c6a7fe0babd84 commit 8036234c72c9361711e867cc1a0c6a7fe0babd84 Author: Alexander V. Chernikov AuthorDate: 2022-08-23 16:19:50 +0000 Commit: Alexander V. Chernikov CommitDate: 2022-08-24 13:59:13 +0000 netinet6: fix SIOCSPFXFLUSH_IN6 by skipping manually-configured prefixes Summary: Currently netinet6/ code allocates IPv6 prefixes (nd_prefix) for both manually-assigned addresses and advertised prefixes. As a result, prefixes from manually-assigned prefixes can be seen in `ndp -p` list and be cleared via `ndp -P`. The latter relies on the SIOCSPFXFLUSH_IN6 ioctl to clear to prefix list. The original intent of the SIOCSPFXFLUSH_IN6 was to clear prefixes originated from the advertising routers: ``` 1998-09-02 JINMEI, Tatuya * nd6.c (nd6_ioctl): added 2 new ioctls; SIOCSRTRFLUSH_IN6 and SIOCSPFXFLUSH_IN6. The former is to flush all default routers in the default router list, and the latter is to flush all the prefixes and the addresses derived from them in the prefix list. ``` Restore the intent by marking prefixes derived from the RA messages with newly-added ndpr_flags.ra_derived flag and skip prefixes not marked with such flag during deletion and listing. Differential Revision: https://reviews.freebsd.org/D36312 MFC after: 2 weeks --- sys/netinet6/in6_var.h | 4 +++- sys/netinet6/nd6.c | 7 ++++--- sys/netinet6/nd6.h | 1 + sys/netinet6/nd6_rtr.c | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sys/netinet6/in6_var.h b/sys/netinet6/in6_var.h index 92e94e730c33..6af0e54ccb75 100644 --- a/sys/netinet6/in6_var.h +++ b/sys/netinet6/in6_var.h @@ -326,7 +326,8 @@ struct in6_prflags { struct prf_ra { u_char onlink : 1; u_char autonomous : 1; - u_char reserved : 6; + u_char ra_derived: 1; + u_char reserved : 5; } prf_ra; u_char prf_reserved1; u_short prf_reserved2; @@ -357,6 +358,7 @@ struct in6_prefixreq { #define ipr_raf_onlink ipr_flags.prf_ra.onlink #define ipr_raf_auto ipr_flags.prf_ra.autonomous +#define ipr_raf_ra_derived ipr_flags.prf_ra.ra_derived #define ipr_statef_onlink ipr_flags.prf_state.onlink diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index 516906fda5cc..0ab629c7fcd0 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -1786,9 +1786,8 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp) ND6_WLOCK(); LIST_FOREACH_SAFE(pr, &V_nd_prefix, ndpr_entry, next) { - if (IN6_IS_ADDR_LINKLOCAL(&pr->ndpr_prefix.sin6_addr)) - continue; /* XXX */ - nd6_prefix_unlink(pr, &prl); + if (pr->ndpr_raf_ra_derived) + nd6_prefix_unlink(pr, &prl); } ND6_WUNLOCK(); @@ -2662,6 +2661,8 @@ nd6_sysctl_prlist(SYSCTL_HANDLER_ARGS) ND6_RLOCK(); LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) { + if (!pr->ndpr_raf_ra_derived) + continue; p.prefix = pr->ndpr_prefix; if (sa6_recoverscope(&p.prefix)) { log(LOG_ERR, "scope error in prefix list (%s)\n", diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h index 3f9f8219b018..d653a432dbe4 100644 --- a/sys/netinet6/nd6.h +++ b/sys/netinet6/nd6.h @@ -243,6 +243,7 @@ struct nd_prefix { #define ndpr_raf ndpr_flags #define ndpr_raf_onlink ndpr_flags.onlink #define ndpr_raf_auto ndpr_flags.autonomous +#define ndpr_raf_ra_derived ndpr_flags.ra_derived #define ndpr_raf_router ndpr_flags.router struct nd_pfxrouter { diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c index 4502428e1690..9b33d0ea9b24 100644 --- a/sys/netinet6/nd6_rtr.c +++ b/sys/netinet6/nd6_rtr.c @@ -517,6 +517,7 @@ nd6_ra_input(struct mbuf *m, int off, int icmp6len) ND_OPT_PI_FLAG_ONLINK) ? 1 : 0; pr.ndpr_raf_auto = (pi->nd_opt_pi_flags_reserved & ND_OPT_PI_FLAG_AUTO) ? 1 : 0; + pr.ndpr_raf_ra_derived = 1; pr.ndpr_plen = pi->nd_opt_pi_prefix_len; pr.ndpr_vltime = ntohl(pi->nd_opt_pi_valid_time); pr.ndpr_pltime = ntohl(pi->nd_opt_pi_preferred_time);