diff options
author | Dimitri Staessens <[email protected]> | 2020-02-18 17:31:19 +0100 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2020-02-23 14:37:27 +0100 |
commit | 00a8b8960c027848817050411e4c9be43cb6a427 (patch) | |
tree | d81d4e7a6d4f987a3cbc92bde7159a489ba97779 | |
parent | ce2b6900e5373041fee62328e5d1c8a30e692ea2 (diff) | |
download | ouroboros-00a8b8960c027848817050411e4c9be43cb6a427.tar.gz ouroboros-00a8b8960c027848817050411e4c9be43cb6a427.zip |
ipcpd: Fix infinite recursion in LFA
There were bugs introduced in the LFA algorithm refactor causing
infinite recursion and SEGV. The infinite recursion check was added as
an explicit compiler flag to the build.
Signed-off-by: Dimitri Staessens <[email protected]>
Signed-off-by: Sander Vrijders <[email protected]>
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/ipcpd/unicast/pol/graph.c | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 03608b04..130e3eb6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,7 @@ test_and_set_c_compiler_flag_global(-Wvla) #test_and_set_c_compiler_flag_global(-Wswitch-default) test_and_set_c_compiler_flag_global(-Wunreachable-code) test_and_set_c_compiler_flag_global(-Wdeclaration-after-statement) +test_and_set_c_compiler_flag_global(-Winfinite-recursion) test_and_set_c_compiler_flag_global(-fmax-errors=5) if (CMAKE_BUILD_TYPE STREQUAL "Release") test_and_set_c_compiler_flag_global(-O3) diff --git a/src/ipcpd/unicast/pol/graph.c b/src/ipcpd/unicast/pol/graph.c index a3689ad6..ba2ce553 100644 --- a/src/ipcpd/unicast/pol/graph.c +++ b/src/ipcpd/unicast/pol/graph.c @@ -625,7 +625,7 @@ static int graph_routing_table_lfa(struct graph * graph, int j; int k; - if (graph_routing_table_lfa(graph, s_addr, table, dist)) + if (graph_routing_table_simple(graph, s_addr, table, dist)) goto fail_table; for (j = 0; j < PROG_MAX_FLOWS; j++) { @@ -677,7 +677,7 @@ static int graph_routing_table_lfa(struct graph * graph, continue; if (n_dist[j][v->index] < - *dist[n_index[j]] + *dist[v->index]) + (*dist)[n_index[j]] + (*dist)[v->index]) if (add_lfa_to_table(table, v->addr, addrs[j])) goto fail_add_lfa; |