From nobody Mon Dec 16 22:34:13 2024 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 4YBvr56GCZz5gd82; Mon, 16 Dec 2024 22:34:13 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YBvr53v31z47Rm; Mon, 16 Dec 2024 22:34:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1734388453; 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=OLrjb7ELmz2C1Y7WJM05l5uW6YKXKw+/ZCHxBc0Xz6g=; b=aBg1uLTDN7NLhyqeMpmxsBCvlNMWC+sEZnZqTICOXVAPnX9coaBadrWP09U0zJB2/qZPGg hGt6ljwfjEamOHcPTvxw/5bmpV/rF/z6/GWB9kB4K/8pivd9j/7LyDuNs5eyGjMjVE+WP/ J98VS770pFTjm71uizhppXR+I4QNbs23cKNTHnYqc9Q2zaEsxinBnTUdvxqfV4gkO1jlkB Lk21SqM7HZgJUaSttriohH1qeaW0D8slhyAitXG5lXNJ7uY/eRS2uC7uq02rIpc2jqQDbN vyI/RAAfrNEfvRODwxiXSHttEdAQdjBZPkds1/1Zs3GY4KIabC4Wv8uhuQbmWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1734388453; 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=OLrjb7ELmz2C1Y7WJM05l5uW6YKXKw+/ZCHxBc0Xz6g=; b=FVzXf8fwKPlD86fIqLqAXBmvbB39zz+CTs+NiGheyh8JrceYZEjPsK+tMJ+Y69XtB3vhn7 tOu+Iz2BwFislSU1DrWYk87Jn7NsvhsvV/Ok675nO20JkU2fRPXpLR1H82rKAwSKmEmecG Hko26Spbnvex8f9TLhtX2KkzQm2u+PwWDchJrjpNMK9KiOrqLmd/wAuWyMtliwbZN57CZ4 M4aAFSJ/JJEZkqWDq51LGNy5hgar+MVLoTK8s70joebosRf1mjxzNslBcc520FvOtHCoEI G4r86ejGjXH+Fd0tPyeGnosR1+K0UpcYy7o3YkPnON9DGKhcgZg+/hBP9qsQrQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1734388453; a=rsa-sha256; cv=none; b=lyS6TLK1mwK5J+FMDL3Ak1Atcio5h4bslrUtrI283qAZ4OUq47+3FEiOKt9Q9xMMpAQ65F S3LZpDQRuln4NtJQxJWtoVG2J2MQLGAMwnxYNK6Cx+0QlgyawNN/oWJwp9POngfeB8MJvm SmBfj+qEdnCsDGtn8kDa7eLd985r2zPbw6Txlz9UUHfuCuAqW/PekxsrvzRgfF70rTKytN TQJgVhWIfizwtHQ2Rm8GmYrk1/QzARlDB2Rg3Z41W3uy3g4dq4+ceQjp3IosRvbAQG7Z0C 5frbL8xh0dMorxDu9oFc7zhAkLikbVYxm3MEjHzDnpzDVHjac9wW4K7R39X08Q== 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 4YBvr53WLtz1Bjj; Mon, 16 Dec 2024 22:34:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 4BGMYDlq031665; Mon, 16 Dec 2024 22:34:13 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 4BGMYDJ5031662; Mon, 16 Dec 2024 22:34:13 GMT (envelope-from git) Date: Mon, 16 Dec 2024 22:34:13 GMT Message-Id: <202412162234.4BGMYDJ5031662@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: 67b655980885 - main - pf: fix address range handling in pfr_pool_get() 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-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/main X-Git-Reftype: branch X-Git-Commit: 67b65598088566997bbc88f5ae1f7f7da26c17cd Auto-Submitted: auto-generated The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=67b65598088566997bbc88f5ae1f7f7da26c17cd commit 67b65598088566997bbc88f5ae1f7f7da26c17cd Author: Kristof Provost AuthorDate: 2024-12-11 14:01:46 +0000 Commit: Kristof Provost CommitDate: 2024-12-16 22:33:56 +0000 pf: fix address range handling in pfr_pool_get() We did not fill out the address in uaddr before running the rn_match() lookup. Change addr to a pointer into uaddr so that we do. Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D48083 --- sys/netpfil/pf/pf_table.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sys/netpfil/pf/pf_table.c b/sys/netpfil/pf/pf_table.c index ce3a6b39ce91..35c9bd4ab655 100644 --- a/sys/netpfil/pf/pf_table.c +++ b/sys/netpfil/pf/pf_table.c @@ -2242,7 +2242,7 @@ int pfr_pool_get(struct pfr_ktable *kt, int *pidx, struct pf_addr *counter, sa_family_t af, pf_addr_filter_func_t filter) { - struct pf_addr addr, cur, mask, umask_addr; + struct pf_addr *addr, cur, mask, umask_addr; union sockaddr_union uaddr, umask; struct pfr_kentry *ke, *ke2 = NULL; int startidx, idx = -1, loop = 0, use_counter = 0; @@ -2254,13 +2254,14 @@ pfr_pool_get(struct pfr_ktable *kt, int *pidx, struct pf_addr *counter, case AF_INET: uaddr.sin.sin_len = sizeof(struct sockaddr_in); uaddr.sin.sin_family = AF_INET; + addr = (struct pf_addr *)&uaddr.sin.sin_addr; break; case AF_INET6: uaddr.sin6.sin6_len = sizeof(struct sockaddr_in6); uaddr.sin6.sin6_family = AF_INET6; + addr = (struct pf_addr *)&uaddr.sin6.sin6_addr; break; } - pfr_sockaddr_to_pf_addr(&uaddr, &addr); if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE) && kt->pfrkt_root != NULL) kt = kt->pfrkt_root; @@ -2302,19 +2303,19 @@ _next_block: use_counter = 0; goto _next_block; } - PF_ACPY(&addr, counter, af); + PF_ACPY(addr, counter, af); } else { /* use first address of block */ - PF_ACPY(&addr, &cur, af); + PF_ACPY(addr, &cur, af); } if (!KENTRY_NETWORK(ke)) { /* this is a single IP address - no possible nested block */ - if (filter && filter(af, &addr)) { + if (filter && filter(af, addr)) { idx++; goto _next_block; } - PF_ACPY(counter, &addr, af); + PF_ACPY(counter, addr, af); *pidx = idx; pfr_kstate_counter_add(&kt->pfrkt_match, 1); return (0); @@ -2334,9 +2335,9 @@ _next_block: /* no need to check KENTRY_RNF_ROOT() here */ if (ke2 == ke) { /* lookup return the same block - perfect */ - if (filter && filter(af, &addr)) + if (filter && filter(af, addr)) goto _next_entry; - PF_ACPY(counter, &addr, af); + PF_ACPY(counter, addr, af); *pidx = idx; pfr_kstate_counter_add(&kt->pfrkt_match, 1); return (0); @@ -2346,9 +2347,9 @@ _next_entry: /* we need to increase the counter past the nested block */ pfr_prepare_network(&umask, AF_INET, ke2->pfrke_net); pfr_sockaddr_to_pf_addr(&umask, &umask_addr); - PF_POOLMASK(&addr, &addr, &umask_addr, &pfr_ffaddr, af); - PF_AINC(&addr, af); - if (!PF_MATCHA(0, &cur, &mask, &addr, af)) { + PF_POOLMASK(addr, addr, &umask_addr, &pfr_ffaddr, af); + PF_AINC(addr, af); + if (!PF_MATCHA(0, &cur, &mask, addr, af)) { /* ok, we reached the end of our main block */ /* go to next block in table */ idx++;