Skip to content

Commit 83c02c6

Browse files
committed
clusterer: bound topology packet counts
Reported-by: Haruto Kimura (Stella) (cherry picked from commit 93c286af60ad8101d56198d5a0e4a6e6efbe5e52)
1 parent 8fe61f9 commit 83c02c6

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

modules/clusterer/topology.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,12 @@ void handle_full_top_update(bin_packet_t *packet, node_info_t *source,
10101010

10111011
bin_pop_int(packet, &no_nodes);
10121012

1013+
if (no_nodes < 0 || no_nodes > MAX_NO_NODES) {
1014+
LM_WARN("Invalid number of nodes [%d] in topology update from node [%d]\n",
1015+
no_nodes, source->node_id);
1016+
return;
1017+
}
1018+
10131019
for (i = 0; i < no_nodes; i++) {
10141020
bin_pop_int(packet, &top_node_id[i]); /* node id */
10151021

@@ -1025,6 +1031,12 @@ void handle_full_top_update(bin_packet_t *packet, node_info_t *source,
10251031
bin_pop_int(packet, &top_node_info[i][2]); /* ls_timestamp */
10261032
bin_pop_int(packet, &top_node_info[i][3]); /* no_neigh */
10271033

1034+
if (top_node_info[i][3] < 0 || top_node_info[i][3] > MAX_NO_NODES) {
1035+
LM_WARN("Invalid number of neighbours [%d] for node [%d] in topology update from node [%d]\n",
1036+
top_node_info[i][3], top_node_id[i], source->node_id);
1037+
return;
1038+
}
1039+
10281040
for (j = 0; j < top_node_info[i][3]; j++)
10291041
bin_pop_int(packet, &top_node_info[i][j+4]); /* neighbor id */
10301042
}
@@ -1077,6 +1089,7 @@ void handle_full_top_update(bin_packet_t *packet, node_info_t *source,
10771089

10781090
lock_release(top_node->lock);
10791091

1092+
no_present_nodes = 0;
10801093
for (j = 0; j < top_node_info[i][3]; j++) {
10811094
top_neigh = get_node_by_id(source->cluster, top_node_info[i][j+4]);
10821095
if (!top_neigh && top_node_info[i][j+4] != current_id) {
@@ -1368,6 +1381,12 @@ void handle_pong(bin_packet_t *received, node_info_t *src_node,
13681381
int node_list[MAX_NO_NODES], i, nr_nodes;
13691382

13701383
bin_pop_int(received, &nr_nodes);
1384+
if (nr_nodes < 0 || nr_nodes > MAX_NO_NODES) {
1385+
LM_WARN("Invalid number of nodes [%d] in pong from node [%d]\n",
1386+
nr_nodes, src_node->node_id);
1387+
return;
1388+
}
1389+
13711390
for (i=0; i<nr_nodes; i++)
13721391
bin_pop_int(received, &node_list[i]);
13731392

0 commit comments

Comments
 (0)