Remove more references to malloc
authorAlan T. DeKok <aland@freeradius.org>
Tue, 26 Mar 2013 20:32:16 +0000 (16:32 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 26 Mar 2013 20:32:16 +0000 (16:32 -0400)
src/modules/rlm_eap/eap.c
src/modules/rlm_eap/libeap/eap_sim.h
src/modules/rlm_eap/libeap/eap_types.h
src/modules/rlm_eap/libeap/eapcommon.c
src/modules/rlm_eap/libeap/eapsimlib.c
src/modules/rlm_eap/radeapclient.c
src/modules/rlm_eap/rlm_eap.c
src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c

index eeb6a1b..4442a59 100644 (file)
@@ -995,7 +995,8 @@ static EAP_DS *eap_buildds(eap_handler_t *handler,
                return NULL;
        }
 
-       eap_ds->response->packet = (unsigned char *)eap_packet;
+       eap_ds->response->packet = (uint8_t *) eap_packet;
+       talloc_steal(eap_ds, eap_packet);
        eap_ds->response->code = eap_packet->code;
        eap_ds->response->id = eap_packet->id;
        eap_ds->response->type.num = eap_packet->data[0];
index 78a6358..22a5c6c 100644 (file)
@@ -150,7 +150,7 @@ struct eapsim_keys {
 /*
  * interfaces in eapsimlib.c
  */
-extern int  eapsim_checkmac(VALUE_PAIR *rvps,
+extern int  eapsim_checkmac(TALLOC_CTX *ctx, VALUE_PAIR *rvps,
                            uint8_t key[8],
                            uint8_t *extra, int extralen,
                            uint8_t calcmac[20]);
index 875ade8..c34ecee 100644 (file)
@@ -164,7 +164,7 @@ extern int eap_wireformat(eap_packet_t *reply);
 extern int eap_basic_compose(RADIUS_PACKET *packet, eap_packet_t *reply);
 extern VALUE_PAIR *eap_packet2vp(RADIUS_PACKET *packet,
                                 const eap_packet_raw_t *reply);
-extern eap_packet_raw_t *eap_vp2packet(VALUE_PAIR *vps);
+extern eap_packet_raw_t *eap_vp2packet(TALLOC_CTX *ctx, VALUE_PAIR *vps);
 void eap_add_reply(REQUEST *request,
                   const char *name, const uint8_t *value, int len);
 
index 2971d61..db91519 100644 (file)
@@ -290,7 +290,7 @@ VALUE_PAIR *eap_packet2vp(RADIUS_PACKET *packet, const eap_packet_raw_t *eap)
  * NOTE: Sometimes Framed-MTU might contain the length of EAP-Message,
  *      refer fragmentation in rfc2869.
  */
-eap_packet_raw_t *eap_vp2packet(VALUE_PAIR *vps)
+eap_packet_raw_t *eap_vp2packet(TALLOC_CTX *ctx, VALUE_PAIR *vps)
 {
        VALUE_PAIR *first, *vp;
        eap_packet_raw_t *eap_packet;
@@ -354,7 +354,7 @@ eap_packet_raw_t *eap_vp2packet(VALUE_PAIR *vps)
        /*
         *      Now that we know the lengths are OK, allocate memory.
         */
-       eap_packet = (eap_packet_raw_t *) malloc(len);
+       eap_packet = talloc_zero(ctx, eap_packet_raw_t);
        if (eap_packet == NULL) {
                radlog(L_ERR, "rlm_eap: out of memory");
                return NULL;
index 79191f3..f674c02 100644 (file)
@@ -259,7 +259,7 @@ int map_eapsim_basictypes(RADIUS_PACKET *r, eap_packet_t *ep)
 
                total_length = EAP_HEADER_LEN + 1 + encoded_size;
                hmaclen = total_length + appendlen;
-               buffer = (unsigned char *)malloc(hmaclen);
+               buffer = talloc_array(r, uint8_t, hmaclen);
                hdr = (eap_packet_raw_t *)buffer;
                if (!hdr) {
                        radlog(L_ERR, "rlm_eap: out of memory");
@@ -384,7 +384,7 @@ int unmap_eapsim_basictypes(RADIUS_PACKET *r,
  *
  */
 int
-eapsim_checkmac(VALUE_PAIR *rvps,
+eapsim_checkmac(TALLOC_CTX *ctx, VALUE_PAIR *rvps,
                uint8_t key[EAPSIM_AUTH_SIZE],
                uint8_t *extra, int extralen,
                uint8_t calcmac[20])
@@ -406,21 +406,16 @@ eapsim_checkmac(VALUE_PAIR *rvps,
        /* get original copy of EAP message, note that it was sanitized
         * to have a valid length, which we depend upon.
         */
-       e = eap_vp2packet(rvps);
-
-       if(e == NULL)
-       {
-               return 0;
-       }
+       e = eap_vp2packet(ctx, rvps);
+       if (!e) return 0;
 
        /* make copy big enough for everything */
        elen = e->length[0] * 256 + e->length[1];
        len = elen + extralen;
 
-       buffer = malloc(len);
-       if(buffer == NULL)
-       {
-               free(e);
+       buffer = talloc_array(ctx, uint8_t, len);
+       if (!buffer) {
+               talloc_free(e);
                return 0;
        }
 
@@ -468,8 +463,8 @@ eapsim_checkmac(VALUE_PAIR *rvps,
        }
 
  done:
-       free(e);
-       free(buffer);
+       talloc_free(e);
+       talloc_free(buffer);
        return(ret);
 }
 
index 3e73b31..61c3c77 100644 (file)
@@ -610,7 +610,7 @@ static int process_eap_challenge(RADIUS_PACKET *req,
        }
 
        /* verify the MAC, now that we have all the keys. */
-       if(eapsim_checkmac(req->vps, eapsim_mk.K_aut,
+       if(eapsim_checkmac(NULL, req->vps, eapsim_mk.K_aut,
                           eapsim_mk.nonce_mt, sizeof(eapsim_mk.nonce_mt),
                           calcmac)) {
                printf("MAC check succeed\n");
@@ -1334,7 +1334,7 @@ static void unmap_eap_methods(RADIUS_PACKET *rep)
        int type;
 
        /* find eap message */
-       e = eap_vp2packet(rep->vps);
+       e = eap_vp2packet(NULL, rep->vps);
 
        /* nothing to do! */
        if(e == NULL) return;
index 1245099..9466ed4 100644 (file)
@@ -308,7 +308,7 @@ static rlm_rcode_t mod_authenticate(void *instance, REQUEST *request)
        /*
         *      Get the eap packet  to start with
         */
-       eap_packet = eap_vp2packet(request->packet->vps);
+       eap_packet = eap_vp2packet(request, request->packet->vps);
        if (eap_packet == NULL) {
                radlog_request(L_ERR, 0, request, "Malformed EAP Message");
                return RLM_MODULE_FAIL;
@@ -753,7 +753,7 @@ static rlm_rcode_t mod_post_auth(void *instance, REQUEST *request)
                return RLM_MODULE_NOOP;
        }
        
-       eap_packet = eap_vp2packet(request->packet->vps);
+       eap_packet = eap_vp2packet(request, request->packet->vps);
        if (eap_packet == NULL) {
                radlog_request(L_ERR, 0, request, "Malformed EAP Message");
                return RLM_MODULE_FAIL;
index 49d694f..62dfc1c 100644 (file)
@@ -482,7 +482,7 @@ static int process_eap_sim_challenge(eap_handler_t *handler, VALUE_PAIR *vps)
        memcpy(srescat +(2*EAPSIM_SRES_SIZE), ess->keys.sres[2], EAPSIM_SRES_SIZE);
 
        /* verify the MAC, now that we have all the keys. */
-       if(eapsim_checkmac(vps, ess->keys.K_aut,
+       if(eapsim_checkmac(handler, vps, ess->keys.K_aut,
                           srescat, sizeof(srescat),
                           calcmac)) {
                DEBUG2("MAC check succeed\n");