Module: kamailio
Branch: master
Commit: 90167403d88f04dd6b84f1c8354c663eba4a2c6b
URL: 
https://github.com/kamailio/kamailio/commit/90167403d88f04dd6b84f1c8354c663eba4a2c6b

Author: Lucian Balaceanu <lucian.balace...@1and1.ro>
Committer: Lucian Balaceanu <lucian.balace...@1and1.ro>
Date: 2017-01-18T10:44:08+02:00

carrieroute: fix double free related to hash_index

- set freed pointer to NULL to avoid double free

---

Modified: src/modules/carrierroute/cr_data.c
Modified: src/modules/carrierroute/cr_rule.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/90167403d88f04dd6b84f1c8354c663eba4a2c6b.diff
Patch: 
https://github.com/kamailio/kamailio/commit/90167403d88f04dd6b84f1c8354c663eba4a2c6b.patch

---

diff --git a/src/modules/carrierroute/cr_data.c 
b/src/modules/carrierroute/cr_data.c
index d84fb07..98ad852 100644
--- a/src/modules/carrierroute/cr_data.c
+++ b/src/modules/carrierroute/cr_data.c
@@ -589,11 +589,13 @@ static int rule_fixup_recursor(struct dtrie_node_t *node) 
{
                                        if (rr->hash_index > rf->rule_num) {
                                                LM_ERR("too large hash index 
%i, max is %i\n", rr->hash_index, rf->rule_num);
                                                shm_free(rf->rules);
+                                               rf->rules = NULL;
                                                return -1;
                                        }
                                        if (rf->rules[rr->hash_index - 1]) {
                                                LM_ERR("duplicate hash index 
%i\n", rr->hash_index);
                                                shm_free(rf->rules);
+                                               rf->rules = NULL;
                                                return -1;
                                        }
                                        rf->rules[rr->hash_index - 1] = rr;
diff --git a/src/modules/carrierroute/cr_rule.c 
b/src/modules/carrierroute/cr_rule.c
index 5130b9e..143cedc 100644
--- a/src/modules/carrierroute/cr_rule.c
+++ b/src/modules/carrierroute/cr_rule.c
@@ -251,6 +251,7 @@ void destroy_route_flags(struct route_flags *rf) {
 
        if (rf->rules) {
                shm_free(rf->rules);
+               rf->rules = NULL;
        }
        rs = rf->rule_list;
        while (rs != NULL) {


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to