|
commit 974c6916ba2f7efc83193bb8c04e95294ca21112
|
|
Author: Christopher Faulet <cfaulet@haproxy.com>
|
|
Date: Fri Jul 26 13:52:13 2019 +0200
|
|
|
|
BUG/MEDIUM: lb-chash: Fix the realloc() when the number of nodes is increased
|
|
|
|
When the number of nodes is increased because the server weight is changed, the
|
|
nodes array must be realloc. But its new size is not correctly set. Only the
|
|
total number of nodes is used to set the new size. But it must also depends on
|
|
the size of a node. It must be the total nomber of nodes times the size of a
|
|
node.
|
|
|
|
This issue was reported on Github (#189).
|
|
|
|
This patch must be backported to all versions since the 1.6.
|
|
|
|
(cherry picked from commit 366ad86af72c455cc958943913cb2de20eefee71)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
|
|
diff --git a/src/lb_chash.c b/src/lb_chash.c
|
|
index a35351e9..0bf4e81a 100644
|
|
--- a/src/lb_chash.c
|
|
+++ b/src/lb_chash.c
|
|
@@ -84,7 +84,7 @@ static inline void chash_queue_dequeue_srv(struct server *s)
|
|
* increased the weight beyond the original weight
|
|
*/
|
|
if (s->lb_nodes_tot < s->next_eweight) {
|
|
- struct tree_occ *new_nodes = realloc(s->lb_nodes, s->next_eweight);
|
|
+ struct tree_occ *new_nodes = realloc(s->lb_nodes, s->next_eweight * sizeof(*new_nodes));
|
|
|
|
if (new_nodes) {
|
|
unsigned int j;
|