Skip to content

Commit

Permalink
Merge branch 'bugfix/esp_tls_closing_fd0' into 'master'
Browse files Browse the repository at this point in the history
esp_tls: fix incorrect closing of fd 0 on connection failure

See merge request idf/esp-idf!4726
  • Loading branch information
igrr committed Apr 17, 2019
2 parents 8edc995 + 7764547 commit 92989b5
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
26 changes: 14 additions & 12 deletions components/esp-tls/esp_tls.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ static int esp_tcp_connect(const char *host, int hostlen, int port, int *sockfd,
ESP_LOGE(TAG, "Failed to create socket (family %d socktype %d protocol %d)", res->ai_family, res->ai_socktype, res->ai_protocol);
goto err_freeaddr;
}
*sockfd = fd;

void *addr_ptr;
if (res->ai_family == AF_INET) {
Expand Down Expand Up @@ -125,12 +124,13 @@ static int esp_tcp_connect(const char *host, int hostlen, int port, int *sockfd,
}

ret = connect(fd, addr_ptr, res->ai_addrlen);
if (ret < 0 && !(errno == EINPROGRESS && cfg->non_block)) {
if (ret < 0 && !(errno == EINPROGRESS && cfg && cfg->non_block)) {

ESP_LOGE(TAG, "Failed to connnect to host (errno %d)", errno);
ESP_LOGE(TAG, "Failed to connect to host (errno %d)", errno);
goto err_freesocket;
}

*sockfd = fd;
freeaddrinfo(res);
return 0;

Expand Down Expand Up @@ -222,14 +222,12 @@ static void mbedtls_cleanup(esp_tls_t *tls)
mbedtls_ssl_config_free(&tls->conf);
mbedtls_ctr_drbg_free(&tls->ctr_drbg);
mbedtls_ssl_free(&tls->ssl);
mbedtls_net_free(&tls->server_fd);
}

static int create_ssl_handle(esp_tls_t *tls, const char *hostname, size_t hostlen, const esp_tls_cfg_t *cfg)
{
int ret;

mbedtls_net_init(&tls->server_fd);

tls->server_fd.fd = tls->sockfd;
mbedtls_ssl_init(&tls->ssl);
mbedtls_ctr_drbg_init(&tls->ctr_drbg);
Expand Down Expand Up @@ -343,7 +341,9 @@ void esp_tls_conn_delete(esp_tls_t *tls)
{
if (tls != NULL) {
mbedtls_cleanup(tls);
if (tls->sockfd) {
if (tls->is_tls) {
mbedtls_net_free(&tls->server_fd);
} else if (tls->sockfd >= 0) {
close(tls->sockfd);
}
free(tls);
Expand Down Expand Up @@ -376,13 +376,15 @@ static int esp_tls_low_level_conn(const char *hostname, int hostlen, int port, c
and in case of blocking connect these cases will get executed one after the other */
switch (tls->conn_state) {
case ESP_TLS_INIT:
;
int sockfd;
int ret = esp_tcp_connect(hostname, hostlen, port, &sockfd, cfg);
tls->sockfd = -1;
if (cfg != NULL) {
mbedtls_net_init(&tls->server_fd);
tls->is_tls = true;
}
int ret = esp_tcp_connect(hostname, hostlen, port, &tls->sockfd, cfg);
if (ret < 0) {
return -1;
}
tls->sockfd = sockfd;
if (!cfg) {
tls->read = tcp_read;
tls->write = tcp_write;
Expand Down Expand Up @@ -545,4 +547,4 @@ int esp_tls_conn_http_new_async(const char *url, const esp_tls_cfg_t *cfg, esp_t
/* Connect to host */
return esp_tls_conn_new_async(&url[u.field_data[UF_HOST].off], u.field_data[UF_HOST].len,
get_port(url, &u), cfg, tls);
}
}
2 changes: 2 additions & 0 deletions components/esp-tls/esp_tls.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ typedef struct esp_tls {
fd_set rset; /*!< read file descriptors */

fd_set wset; /*!< write file descriptors */

bool is_tls; /*!< indicates connection type (TLS or NON-TLS) */
} esp_tls_t;

/**
Expand Down

0 comments on commit 92989b5

Please sign in to comment.