summaryrefslogtreecommitdiff
path: root/accel-pptpd/ppp/ppp_ipcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'accel-pptpd/ppp/ppp_ipcp.c')
-rw-r--r--accel-pptpd/ppp/ppp_ipcp.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/accel-pptpd/ppp/ppp_ipcp.c b/accel-pptpd/ppp/ppp_ipcp.c
index b8dfe7f..f3c20a6 100644
--- a/accel-pptpd/ppp/ppp_ipcp.c
+++ b/accel-pptpd/ppp/ppp_ipcp.c
@@ -11,6 +11,8 @@
#include "ppp.h"
#include "ppp_ipcp.h"
+#include "memdebug.h"
+
struct recv_opt_t
{
struct list_head entry;
@@ -35,6 +37,8 @@ static void ipcp_options_init(struct ppp_ipcp_t *ipcp)
struct ipcp_option_t *lopt;
struct ipcp_option_handler_t *h;
+ ipcp->conf_req_len = sizeof(struct ipcp_hdr_t);
+
list_for_each_entry(h,&option_handlers,entry)
{
lopt=h->init(ipcp);
@@ -61,7 +65,7 @@ static void ipcp_options_free(struct ppp_ipcp_t *ipcp)
static struct ppp_layer_data_t *ipcp_layer_init(struct ppp_t *ppp)
{
- struct ppp_ipcp_t *ipcp=malloc(sizeof(*ipcp));
+ struct ppp_ipcp_t *ipcp=_malloc(sizeof(*ipcp));
memset(ipcp,0,sizeof(*ipcp));
log_ppp_debug("ipcp_layer_init\n");
@@ -123,7 +127,7 @@ void ipcp_layer_free(struct ppp_layer_data_t *ld)
ipcp_options_free(ipcp);
ppp_fsm_free(&ipcp->fsm);
- free(ipcp);
+ _free(ipcp);
}
static void ipcp_layer_up(struct ppp_fsm_t *fsm)
@@ -156,7 +160,7 @@ static void print_ropt(struct recv_opt_t *ropt)
static int send_conf_req(struct ppp_fsm_t *fsm)
{
struct ppp_ipcp_t *ipcp=container_of(fsm,typeof(*ipcp),fsm);
- uint8_t *buf=malloc(ipcp->conf_req_len), *ptr=buf;
+ uint8_t *buf=_malloc(ipcp->conf_req_len), *ptr=buf;
struct ipcp_hdr_t *ipcp_hdr=(struct ipcp_hdr_t*)ptr;
struct ipcp_option_t *lopt;
int n;
@@ -194,6 +198,8 @@ static int send_conf_req(struct ppp_fsm_t *fsm)
ipcp_hdr->len=htons((ptr-buf)-2);
ppp_unit_send(ipcp->ppp,ipcp_hdr,ptr-buf);
+ _free(buf);
+
return 0;
}
@@ -211,7 +217,7 @@ static void send_conf_ack(struct ppp_fsm_t *fsm)
static void send_conf_nak(struct ppp_fsm_t *fsm)
{
struct ppp_ipcp_t *ipcp=container_of(fsm,typeof(*ipcp),fsm);
- uint8_t *buf=malloc(ipcp->conf_req_len), *ptr=buf;
+ uint8_t *buf=_malloc(ipcp->conf_req_len), *ptr=buf;
struct ipcp_hdr_t *ipcp_hdr=(struct ipcp_hdr_t*)ptr;
struct recv_opt_t *ropt;
@@ -238,12 +244,14 @@ static void send_conf_nak(struct ppp_fsm_t *fsm)
ipcp_hdr->len=htons((ptr-buf)-2);
ppp_unit_send(ipcp->ppp,ipcp_hdr,ptr-buf);
+
+ _free(buf);
}
static void send_conf_rej(struct ppp_fsm_t *fsm)
{
struct ppp_ipcp_t *ipcp=container_of(fsm,typeof(*ipcp),fsm);
- uint8_t *buf=malloc(ipcp->ropt_len), *ptr=buf;
+ uint8_t *buf=_malloc(ipcp->ropt_len + sizeof(struct ipcp_hdr_t)), *ptr=buf;
struct ipcp_hdr_t *ipcp_hdr=(struct ipcp_hdr_t*)ptr;
struct recv_opt_t *ropt;
@@ -272,6 +280,8 @@ static void send_conf_rej(struct ppp_fsm_t *fsm)
ipcp_hdr->len=htons((ptr-buf)-2);
ppp_unit_send(ipcp->ppp,ipcp_hdr,ptr-buf);
+
+ _free(buf);
}
static int ipcp_recv_conf_req(struct ppp_ipcp_t *ipcp,uint8_t *data,int size)
@@ -287,7 +297,7 @@ static int ipcp_recv_conf_req(struct ppp_ipcp_t *ipcp,uint8_t *data,int size)
{
hdr=(struct ipcp_opt_hdr_t *)data;
- ropt=malloc(sizeof(*ropt));
+ ropt=_malloc(sizeof(*ropt));
memset(ropt,0,sizeof(*ropt));
if (hdr->len>size) ropt->len=size;
else ropt->len=hdr->len;
@@ -350,7 +360,7 @@ static void ipcp_free_conf_req(struct ppp_ipcp_t *ipcp)
{
ropt=list_entry(ipcp->ropt_list.next,typeof(*ropt),entry);
list_del(&ropt->entry);
- free(ropt);
+ _free(ropt);
}
}
@@ -531,16 +541,16 @@ static void ipcp_recv(struct ppp_handler_t*h)
ppp_fsm_recv_conf_rej(&ipcp->fsm);
break;
case TERMREQ:
- term_msg=strndup((char*)(hdr+1),ntohs(hdr->len));
+ term_msg=_strndup((char*)(hdr+1),ntohs(hdr->len));
log_ppp_debug("recv [IPCP TermReq id=%x \"%s\"]\n",hdr->id,term_msg);
- free(term_msg);
+ _free(term_msg);
ppp_fsm_recv_term_req(&ipcp->fsm);
ppp_terminate(ipcp->ppp, 0);
break;
case TERMACK:
- term_msg=strndup((char*)(hdr+1),ntohs(hdr->len));
+ term_msg=_strndup((char*)(hdr+1),ntohs(hdr->len));
log_ppp_debug("recv [IPCP TermAck id=%x \"%s\"]\n",hdr->id,term_msg);
- free(term_msg);
+ _free(term_msg);
ppp_fsm_recv_term_ack(&ipcp->fsm);
break;
case CODEREJ: