* [PATCH net 0/1] wireguard fixes for 6.5-rc6
@ 2023-08-07 13:21 Jason A. Donenfeld
2023-08-07 13:21 ` [PATCH net 1/1] wireguard: allowedips: expand maximum node depth Jason A. Donenfeld
2023-08-07 19:30 ` [PATCH net 0/1] wireguard fixes for 6.5-rc6 patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Jason A. Donenfeld @ 2023-08-07 13:21 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Jason A. Donenfeld
Hi Davkub,
Just one patch this time, somewhat late in the cycle:
1) Fix an off-by-one calculation for the maximum node depth size in the
allowedips trie data structure, and also adjust the self-tests to hit
this case so it doesn't regress again in the future.
This is marked for stable@ and has a fixes tag as well.
Thanks,
Jason
Jason A. Donenfeld (1):
wireguard: allowedips: expand maximum node depth
drivers/net/wireguard/allowedips.c | 8 ++++----
drivers/net/wireguard/selftest/allowedips.c | 16 ++++++++++------
2 files changed, 14 insertions(+), 10 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH net 1/1] wireguard: allowedips: expand maximum node depth
2023-08-07 13:21 [PATCH net 0/1] wireguard fixes for 6.5-rc6 Jason A. Donenfeld
@ 2023-08-07 13:21 ` Jason A. Donenfeld
2023-08-07 19:30 ` [PATCH net 0/1] wireguard fixes for 6.5-rc6 patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Jason A. Donenfeld @ 2023-08-07 13:21 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Jason A. Donenfeld, stable
In the allowedips self-test, nodes are inserted into the tree, but it
generated an even amount of nodes, but for checking maximum node depth,
there is of course the root node, which makes the total number
necessarily odd. With two few nodes added, it never triggered the
maximum depth check like it should have. So, add 129 nodes instead of
128 nodes, and do so with a more straightforward scheme, starting with
all the bits set, and shifting over one each time. Then increase the
maximum depth to 129, and choose a better name for that variable to
make it clear that it represents depth as opposed to bits.
Cc: stable@vger.kernel.org
Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
drivers/net/wireguard/allowedips.c | 8 ++++----
drivers/net/wireguard/selftest/allowedips.c | 16 ++++++++++------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireguard/allowedips.c b/drivers/net/wireguard/allowedips.c
index 5bf7822c53f1..0ba714ca5185 100644
--- a/drivers/net/wireguard/allowedips.c
+++ b/drivers/net/wireguard/allowedips.c
@@ -6,7 +6,7 @@
#include "allowedips.h"
#include "peer.h"
-enum { MAX_ALLOWEDIPS_BITS = 128 };
+enum { MAX_ALLOWEDIPS_DEPTH = 129 };
static struct kmem_cache *node_cache;
@@ -42,7 +42,7 @@ static void push_rcu(struct allowedips_node **stack,
struct allowedips_node __rcu *p, unsigned int *len)
{
if (rcu_access_pointer(p)) {
- if (WARN_ON(IS_ENABLED(DEBUG) && *len >= MAX_ALLOWEDIPS_BITS))
+ if (WARN_ON(IS_ENABLED(DEBUG) && *len >= MAX_ALLOWEDIPS_DEPTH))
return;
stack[(*len)++] = rcu_dereference_raw(p);
}
@@ -55,7 +55,7 @@ static void node_free_rcu(struct rcu_head *rcu)
static void root_free_rcu(struct rcu_head *rcu)
{
- struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_BITS] = {
+ struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_DEPTH] = {
container_of(rcu, struct allowedips_node, rcu) };
unsigned int len = 1;
@@ -68,7 +68,7 @@ static void root_free_rcu(struct rcu_head *rcu)
static void root_remove_peer_lists(struct allowedips_node *root)
{
- struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_BITS] = { root };
+ struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_DEPTH] = { root };
unsigned int len = 1;
while (len > 0 && (node = stack[--len])) {
diff --git a/drivers/net/wireguard/selftest/allowedips.c b/drivers/net/wireguard/selftest/allowedips.c
index 78ebe2892a78..3d1f64ff2e12 100644
--- a/drivers/net/wireguard/selftest/allowedips.c
+++ b/drivers/net/wireguard/selftest/allowedips.c
@@ -593,16 +593,20 @@ bool __init wg_allowedips_selftest(void)
wg_allowedips_remove_by_peer(&t, a, &mutex);
test_negative(4, a, 192, 168, 0, 1);
- /* These will hit the WARN_ON(len >= MAX_ALLOWEDIPS_BITS) in free_node
+ /* These will hit the WARN_ON(len >= MAX_ALLOWEDIPS_DEPTH) in free_node
* if something goes wrong.
*/
- for (i = 0; i < MAX_ALLOWEDIPS_BITS; ++i) {
- part = cpu_to_be64(~(1LLU << (i % 64)));
- memset(&ip, 0xff, 16);
- memcpy((u8 *)&ip + (i < 64) * 8, &part, 8);
+ for (i = 0; i < 64; ++i) {
+ part = cpu_to_be64(~0LLU << i);
+ memset(&ip, 0xff, 8);
+ memcpy((u8 *)&ip + 8, &part, 8);
+ wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
+ memcpy(&ip, &part, 8);
+ memset((u8 *)&ip + 8, 0, 8);
wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
}
-
+ memset(&ip, 0, 16);
+ wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
wg_allowedips_free(&t, &mutex);
wg_allowedips_init(&t);
--
2.41.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net 0/1] wireguard fixes for 6.5-rc6
2023-08-07 13:21 [PATCH net 0/1] wireguard fixes for 6.5-rc6 Jason A. Donenfeld
2023-08-07 13:21 ` [PATCH net 1/1] wireguard: allowedips: expand maximum node depth Jason A. Donenfeld
@ 2023-08-07 19:30 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-08-07 19:30 UTC (permalink / raw)
To: Jason A. Donenfeld; +Cc: netdev, davem, kuba
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Mon, 7 Aug 2023 15:21:26 +0200 you wrote:
> Hi Davkub,
>
> Just one patch this time, somewhat late in the cycle:
>
> 1) Fix an off-by-one calculation for the maximum node depth size in the
> allowedips trie data structure, and also adjust the self-tests to hit
> this case so it doesn't regress again in the future.
>
> [...]
Here is the summary with links:
- [net,1/1] wireguard: allowedips: expand maximum node depth
https://git.kernel.org/netdev/net/c/46622219aae2
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-08-07 19:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-07 13:21 [PATCH net 0/1] wireguard fixes for 6.5-rc6 Jason A. Donenfeld
2023-08-07 13:21 ` [PATCH net 1/1] wireguard: allowedips: expand maximum node depth Jason A. Donenfeld
2023-08-07 19:30 ` [PATCH net 0/1] wireguard fixes for 6.5-rc6 patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).