diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2016-03-04 22:08:17 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2016-03-04 22:08:17 +0300 |
commit | 3fa9e6ad35c7768ccba7381599119656b18e5eb9 (patch) | |
tree | a8df3d0448c5f1197c7ae77ec7865b43ae43ea83 /accel-pppd/ppp | |
parent | 5b44e480d387916fe19f93caa45faac954444f9c (diff) | |
download | accel-ppp-xebd-3fa9e6ad35c7768ccba7381599119656b18e5eb9.tar.gz accel-ppp-xebd-3fa9e6ad35c7768ccba7381599119656b18e5eb9.zip |
ppp_auth: fixed possible use after free
Diffstat (limited to 'accel-pppd/ppp')
-rw-r--r-- | accel-pppd/ppp/ppp_auth.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/accel-pppd/ppp/ppp_auth.c b/accel-pppd/ppp/ppp_auth.c index aa663bf..7927288 100644 --- a/accel-pppd/ppp/ppp_auth.c +++ b/accel-pppd/ppp/ppp_auth.c @@ -343,10 +343,8 @@ int __export ppp_auth_succeeded(struct ppp_t *ppp, char *username) { struct auth_layer_data_t *ad = container_of(ppp_find_layer_data(ppp, &auth_layer), typeof(*ad), ld); - if (ap_session_set_username(&ppp->ses, username)) { - _free(username); + if (ap_session_set_username(&ppp->ses, username)) return -1; - } if (connect_ppp_channel(ppp)) return -1; @@ -361,7 +359,9 @@ void __export ppp_auth_failed(struct ppp_t *ppp, char *username) if (username) { pthread_rwlock_wrlock(&ses_lock); if (!ppp->ses.username) - ppp->ses.username = _strdup(username); + ppp->ses.username = username; + else + _free(username); ppp->ses.terminate_cause = TERM_AUTH_ERROR; pthread_rwlock_unlock(&ses_lock); log_ppp_info1("%s: authentication failed\n", username); |