EAP-pwd: Fix couple of memory leaks
authorJouni Malinen <j@w1.fi>
Wed, 15 Sep 2010 08:16:17 +0000 (22:16 -1000)
committerJouni Malinen <j@w1.fi>
Wed, 15 Sep 2010 08:16:17 +0000 (22:16 -1000)
src/eap_common/eap_pwd_common.c
src/eap_peer/eap_pwd.c
src/eap_server/eap_server_pwd.c

index d01ba0a..3dbe9e4 100644 (file)
@@ -245,10 +245,11 @@ int compute_password_element(EAP_PWD_group *grp, u16 num,
        grp->group_num = num;
        if (0) {
  fail:
+               EC_GROUP_free(grp->group);
                EC_POINT_free(grp->pwe);
                BN_free(grp->order);
                BN_free(grp->prime);
-               free(grp);
+               os_free(grp);
                grp = NULL;
                ret = 1;
        }
index 42a849f..3baca15 100644 (file)
@@ -142,8 +142,15 @@ static void eap_pwd_deinit(struct eap_sm *sm, void *priv)
        EC_POINT_free(data->my_element);
        EC_POINT_free(data->server_element);
        os_free(data->id_peer);
+       os_free(data->id_server);
        os_free(data->password);
-       os_free(data->grp);
+       if (data->grp) {
+               EC_GROUP_free(data->grp->group);
+               EC_POINT_free(data->grp->pwe);
+               BN_free(data->grp->order);
+               BN_free(data->grp->prime);
+               os_free(data->grp);
+       }
        os_free(data);
 }
 
index 65b94c7..512817b 100644 (file)
@@ -100,7 +100,7 @@ static void * eap_pwd_init(struct eap_sm *sm)
 
        data->password = os_malloc(sm->user->password_len);
        if (data->password == NULL) {
-               wpa_printf(MSG_INFO, "EAP-PWD: Mmemory allocation password "
+               wpa_printf(MSG_INFO, "EAP-PWD: Memory allocation password "
                           "fail");
                os_free(data->id_server);
                os_free(data);
@@ -135,7 +135,14 @@ static void eap_pwd_reset(struct eap_sm *sm, void *priv)
        EC_POINT_free(data->peer_element);
        os_free(data->id_peer);
        os_free(data->id_server);
-       os_free(data->grp);
+       os_free(data->password);
+       if (data->grp) {
+               EC_GROUP_free(data->grp->group);
+               EC_POINT_free(data->grp->pwe);
+               BN_free(data->grp->order);
+               BN_free(data->grp->prime);
+               os_free(data->grp);
+       }
        os_free(data);
 }