summaryrefslogtreecommitdiffstatshomepage
path: root/extmod/modssl_mbedtls.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2023-08-09 13:19:18 +1000
committerDamien George <damien@micropython.org>2023-08-09 13:22:57 +1000
commitd529c20674131b9ce36853b92784e901a1bc86f4 (patch)
tree5b0dcb0a1f578d04b0c195a30ff1a7ccfd29deaf /extmod/modssl_mbedtls.c
parent20d3a6b1964705596d690182956f56b4f7678041 (diff)
downloadmicropython-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.c13
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)) {