diff options
author | Damien George <damien@micropython.org> | 2023-08-09 13:19:18 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2023-08-09 13:22:57 +1000 |
commit | d529c20674131b9ce36853b92784e901a1bc86f4 (patch) | |
tree | 5b0dcb0a1f578d04b0c195a30ff1a7ccfd29deaf /extmod/modssl_mbedtls.c | |
parent | 20d3a6b1964705596d690182956f56b4f7678041 (diff) | |
download | micropython-d529c20674131b9ce36853b92784e901a1bc86f4.tar.gz micropython-d529c20674131b9ce36853b92784e901a1bc86f4.zip |
extmod/modssl_mbedtls: Fix ioctl of a socket in closed/error state.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'extmod/modssl_mbedtls.c')
-rw-r--r-- | extmod/modssl_mbedtls.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/extmod/modssl_mbedtls.c b/extmod/modssl_mbedtls.c index 8974ff65dd..b02b77b76f 100644 --- a/extmod/modssl_mbedtls.c +++ b/extmod/modssl_mbedtls.c @@ -486,15 +486,20 @@ STATIC mp_uint_t socket_ioctl(mp_obj_t o_in, mp_uint_t request, uintptr_t arg, i mp_uint_t ret = 0; uintptr_t saved_arg = 0; mp_obj_t sock = self->sock; - if (sock == MP_OBJ_NULL || (request != MP_STREAM_CLOSE && self->last_error != 0)) { - // Closed or error socket: - return MP_STREAM_POLL_NVAL; - } if (request == MP_STREAM_CLOSE) { + if (sock == MP_OBJ_NULL) { + // Already closed socket, do nothing. + return 0; + } self->sock = MP_OBJ_NULL; mbedtls_ssl_free(&self->ssl); } else if (request == MP_STREAM_POLL) { + if (sock == MP_OBJ_NULL || self->last_error != 0) { + // Closed or error socket, return NVAL flag. + return MP_STREAM_POLL_NVAL; + } + // If the library signaled us that it needs reading or writing, only check that direction, // but save what the caller asked because we need to restore it later if (self->poll_mask && (arg & MP_STREAM_POLL_RDWR)) { |