1
0
mirror of https://github.com/Mbed-TLS/mbedtls.git synced 2025-07-30 22:43:08 +03:00

Add guards for closed socket in net.c

This is particularly problematic when calling FD_SET( -1, ... ), but let's
check it in all functions.

This was introduced with the new API and the fact the net_free() now sets the
internal fd to -1 in order to mark it as closed: now using this information.
This commit is contained in:
Manuel Pégourié-Gonnard
2015-07-01 19:03:27 +02:00
parent 046589e424
commit 9bd0afdb22
4 changed files with 19 additions and 3 deletions

View File

@ -448,8 +448,13 @@ void mbedtls_net_usleep( unsigned long usec )
*/
int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len )
{
int ret;
int fd = ((mbedtls_net_context *) ctx)->fd;
int ret = (int) read( fd, buf, len );
if( fd < 0 )
return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
ret = (int) read( fd, buf, len );
if( ret < 0 )
{
@ -485,6 +490,9 @@ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len,
fd_set read_fds;
int fd = ((mbedtls_net_context *) ctx)->fd;
if( fd < 0 )
return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
FD_ZERO( &read_fds );
FD_SET( fd, &read_fds );
@ -520,8 +528,13 @@ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len,
*/
int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len )
{
int ret;
int fd = ((mbedtls_net_context *) ctx)->fd;
int ret = (int) write( fd, buf, len );
if( fd < 0 )
return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
ret = (int) write( fd, buf, len );
if( ret < 0 )
{