aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorGabriel Oginski <gabrielx.oginski@intel.com>2021-11-02 12:19:01 +0100
committerFan Zhang <roy.fan.zhang@intel.com>2021-11-22 15:28:31 +0000
commitf33979ba88111be3b7935ea90172422e4d4a114b (patch)
tree92647bc7113a7dfee4be5a87b541e5e333921848 /src/plugins
parentd431d7404d0bf8568e86f145288ed5d76ce40530 (diff)
wireguard: add local variable in handshake process
Originally handshake process gets pointer to value of index peer. In the meantime this pointer can be invalid due to resize hash table for wireguard and passed poison value to another function. The fixes add local variable to keep index of peer instead of value from pointer. Type: fix Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com> Change-Id: I1b2535c44b4f987d19077c75c778aaa5ed71a457
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/wireguard/wireguard_input.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/plugins/wireguard/wireguard_input.c b/src/plugins/wireguard/wireguard_input.c
index 3e8ae9b2173..d146d0d8fb5 100644
--- a/src/plugins/wireguard/wireguard_input.c
+++ b/src/plugins/wireguard/wireguard_input.c
@@ -245,12 +245,14 @@ wg_handshake_process (vlib_main_t *vm, wg_main_t *wmp, vlib_buffer_t *b,
case MESSAGE_HANDSHAKE_RESPONSE:
{
message_handshake_response_t *resp = current_b_data;
+ index_t peeri = INDEX_INVALID;
u32 *entry =
wg_index_table_lookup (&wmp->index_table, resp->receiver_index);
if (PREDICT_TRUE (entry != NULL))
{
- peer = wg_peer_get (*entry);
+ peeri = *entry;
+ peer = wg_peer_get (peeri);
if (wg_peer_is_dead (peer))
return WG_INPUT_ERROR_PEER;
}
@@ -282,7 +284,7 @@ wg_handshake_process (vlib_main_t *vm, wg_main_t *wmp, vlib_buffer_t *b,
}
else
{
- wg_peer_update_flags (*entry, WG_PEER_ESTABLISHED, true);
+ wg_peer_update_flags (peeri, WG_PEER_ESTABLISHED, true);
}
}
break;