mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
curl_schannel.c: Fixed invalid memory access during SSL shutdown
This commit is contained in:
parent
52d72e66c2
commit
35874298e4
@ -534,6 +534,7 @@ schannel_connect_step3(struct connectdata *conn, int sockindex)
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
connssl->cred->cached = TRUE;
|
||||||
infof(data, "schannel: stored credential handle in session cache\n");
|
infof(data, "schannel: stored credential handle in session cache\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1141,17 +1142,11 @@ int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)
|
|||||||
connssl->cred->refcount);
|
connssl->cred->refcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if the handle refcount is zero, check if we have not cached it */
|
/* if the handle was not cached and the refcount is zero */
|
||||||
if(connssl->cred->refcount == 0) {
|
if(!connssl->cred->cached && connssl->cred->refcount == 0) {
|
||||||
if(Curl_ssl_getsessionid(conn, (void**)&cached_cred, NULL)) {
|
infof(data, "schannel: clear credential handle\n");
|
||||||
cached_cred = NULL;
|
s_pSecFn->FreeCredentialsHandle(&connssl->cred->cred_handle);
|
||||||
}
|
Curl_safefree(connssl->cred);
|
||||||
/* if the handle was not cached, it is stale to be freed */
|
|
||||||
if(connssl->cred != cached_cred) {
|
|
||||||
infof(data, "schannel: clear credential handle\n");
|
|
||||||
s_pSecFn->FreeCredentialsHandle(&connssl->cred->cred_handle);
|
|
||||||
Curl_safefree(connssl->cred);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1177,7 +1172,7 @@ void Curl_schannel_session_free(void *ptr)
|
|||||||
{
|
{
|
||||||
struct curl_schannel_cred *cred = ptr;
|
struct curl_schannel_cred *cred = ptr;
|
||||||
|
|
||||||
if(cred && cred->refcount == 0) {
|
if(cred && cred->cached && cred->refcount == 0) {
|
||||||
s_pSecFn->FreeCredentialsHandle(&cred->cred_handle);
|
s_pSecFn->FreeCredentialsHandle(&cred->cred_handle);
|
||||||
Curl_safefree(cred);
|
Curl_safefree(cred);
|
||||||
}
|
}
|
||||||
|
@ -243,6 +243,7 @@ struct curl_schannel_cred {
|
|||||||
CredHandle cred_handle;
|
CredHandle cred_handle;
|
||||||
TimeStamp time_stamp;
|
TimeStamp time_stamp;
|
||||||
int refcount;
|
int refcount;
|
||||||
|
bool cached;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct curl_schannel_ctxt {
|
struct curl_schannel_ctxt {
|
||||||
|
Loading…
Reference in New Issue
Block a user