summaryrefslogtreecommitdiff
path: root/isisd/isis_adjacency.c
diff options
context:
space:
mode:
authorMark Stapp <mjs@cisco.com>2024-08-09 10:08:21 -0400
committerMark Stapp <mjs@cisco.com>2024-08-09 10:08:21 -0400
commit3eb7d1641166872591554519607483f6d77657f5 (patch)
tree9c10fe0e038466b31fbe381e9da8ca316457e7a3 /isisd/isis_adjacency.c
parente7fd713afcea95a816723aa417928c8225453d19 (diff)
isisd: fix memory handling in isis_adj_process_threeway()
The adj_process_threeway() api may call the adj_state_change() api, which may delete the adj struct being examined. Change the signature so that callers pass a ptr-to-ptr so that they will see that deletion. Signed-off-by: Mark Stapp <mjs@cisco.com>
Diffstat (limited to 'isisd/isis_adjacency.c')
-rw-r--r--isisd/isis_adjacency.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c
index 3ed6fe95f5..078280acf5 100644
--- a/isisd/isis_adjacency.c
+++ b/isisd/isis_adjacency.c
@@ -231,11 +231,12 @@ static void isis_adj_route_switchover(struct isis_adjacency *adj)
}
}
-void isis_adj_process_threeway(struct isis_adjacency *adj,
+void isis_adj_process_threeway(struct isis_adjacency **padj,
struct isis_threeway_adj *tw_adj,
enum isis_adj_usage adj_usage)
{
enum isis_threeway_state next_tw_state = ISIS_THREEWAY_DOWN;
+ struct isis_adjacency *adj = *padj;
if (tw_adj && !adj->circuit->disable_threeway_adj) {
if (tw_adj->state == ISIS_THREEWAY_DOWN) {
@@ -265,14 +266,13 @@ void isis_adj_process_threeway(struct isis_adjacency *adj,
fabricd_initial_sync_hello(adj->circuit);
if (next_tw_state == ISIS_THREEWAY_DOWN) {
- isis_adj_state_change(&adj, ISIS_ADJ_DOWN,
- "Neighbor restarted");
+ isis_adj_state_change(padj, ISIS_ADJ_DOWN, "Neighbor restarted");
return;
}
if (next_tw_state == ISIS_THREEWAY_UP) {
if (adj->adj_state != ISIS_ADJ_UP) {
- isis_adj_state_change(&adj, ISIS_ADJ_UP, NULL);
+ isis_adj_state_change(padj, ISIS_ADJ_UP, NULL);
adj->adj_usage = adj_usage;
}
}