浏览代码

ims_registrar_pcscf: Updated security_t deallocation in sec_agree.c. Fix parsing of ealg parameter.

Tsvetomir Dimitrov 7 年之前
父节点
当前提交
2a0bef409d
共有 2 个文件被更改,包括 12 次插入7 次删除
  1. 12 5
      src/modules/ims_registrar_pcscf/sec_agree.c
  2. 0 2
      src/modules/ims_registrar_pcscf/sec_agree.h

+ 12 - 5
src/modules/ims_registrar_pcscf/sec_agree.c

@@ -69,7 +69,7 @@ static int process_sec_agree_param(str name, str value, ipsec_t *ret)
         SEC_COPY_STR_PARAM(ret->mod, value);
     }
     else if(strncasecmp(name.s, "ealg", name.len) == 0) {
-        SEC_COPY_STR_PARAM(ret->r_alg, value);
+        SEC_COPY_STR_PARAM(ret->r_ealg, value);
     }
     else if(strncasecmp(name.s, "spi-c", name.len) == 0) {
         ret->spi_uc = parse_digits(value);
@@ -201,20 +201,27 @@ static security_t* parse_sec_agree(struct hdr_field* h)
     return params;
 
 cleanup:
-    if(params) {
+    // The same piece of code also lives in modules/ims_usrloc_pcscf/pcontact.c
+    // Function - free_security()
+    // Keep them in sync!
+    if (params) {
         shm_free(params->sec_header.s);
 
-        if(params->data.ipsec) {
+        if(params->type == SECURITY_IPSEC && params->data.ipsec) {
+            shm_free(params->data.ipsec->ealg.s);
+            shm_free(params->data.ipsec->r_ealg.s);
+            shm_free(params->data.ipsec->ck.s);
+            shm_free(params->data.ipsec->alg.s);
             shm_free(params->data.ipsec->r_alg.s);
+            shm_free(params->data.ipsec->ik.s);
             shm_free(params->data.ipsec->prot.s);
             shm_free(params->data.ipsec->mod.s);
-            shm_free(params->data.ipsec->ealg.s);
-
             shm_free(params->data.ipsec);
         }
 
         shm_free(params);
     }
+
     return NULL;
 }
 

+ 0 - 2
src/modules/ims_registrar_pcscf/sec_agree.h

@@ -32,6 +32,4 @@
  */
 security_t* cscf_get_security(struct sip_msg *msg);
 
-void free_security_t(security_t *params);
-
 #endif // SEC_AGREE_H