You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
1.3 KiB

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