From d0e2c7bea4ef14cda396a6a73ff85d184c01d741 Mon Sep 17 00:00:00 2001 From: Damian Ho Date: Mon, 12 Apr 2021 21:01:15 +0800 Subject: [PATCH] allowedips: Increase stack size A stack size of 128 is insufficient in the worst-case scenario Signed-off-by: Damian Ho --- src/allowedips.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/allowedips.c b/src/allowedips.c index 23c2285c..a1027c8f 100644 --- a/src/allowedips.c +++ b/src/allowedips.c @@ -40,14 +40,14 @@ static void push_rcu(struct allowedips_node **stack, struct allowedips_node __rcu *p, unsigned int *len) { if (rcu_access_pointer(p)) { - WARN_ON(IS_ENABLED(DEBUG) && *len >= 128); + WARN_ON(IS_ENABLED(DEBUG) && *len >= 128 + 1); stack[(*len)++] = rcu_dereference_raw(p); } } static void root_free_rcu(struct rcu_head *rcu) { - struct allowedips_node *node, *stack[128] = { + struct allowedips_node *node, *stack[128 + 1] = { container_of(rcu, struct allowedips_node, rcu) }; unsigned int len = 1; @@ -60,7 +60,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[128] = { root }; + struct allowedips_node *node, *stack[128 + 1] = { root }; unsigned int len = 1; while (len > 0 && (node = stack[--len])) { @@ -77,11 +77,11 @@ static void walk_remove_by_peer(struct allowedips_node __rcu **top, #define REF(p) rcu_access_pointer(p) #define DEREF(p) rcu_dereference_protected(*(p), lockdep_is_held(lock)) #define PUSH(p) ({ \ - WARN_ON(IS_ENABLED(DEBUG) && len >= 128); \ + WARN_ON(IS_ENABLED(DEBUG) && len >= 128 + 1); \ stack[len++] = p; \ }) - struct allowedips_node __rcu **stack[128], **nptr; + struct allowedips_node __rcu **stack[128 + 1], **nptr; struct allowedips_node *node, *prev; unsigned int len;