Browse Source

extmod/modssl_mbedtls: Fix ioctl of a socket in closed/error state.

Signed-off-by: Damien George <damien@micropython.org>
pull/12195/head
Damien George 1 year ago
parent
commit
d529c20674
  1. 13
      extmod/modssl_mbedtls.c
  2. 2
      tests/extmod/ssl_ioctl.py.exp

13
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; mp_uint_t ret = 0;
uintptr_t saved_arg = 0; uintptr_t saved_arg = 0;
mp_obj_t sock = self->sock; 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 (request == MP_STREAM_CLOSE) {
if (sock == MP_OBJ_NULL) {
// Already closed socket, do nothing.
return 0;
}
self->sock = MP_OBJ_NULL; self->sock = MP_OBJ_NULL;
mbedtls_ssl_free(&self->ssl); mbedtls_ssl_free(&self->ssl);
} else if (request == MP_STREAM_POLL) { } 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, // 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 // but save what the caller asked because we need to restore it later
if (self->poll_mask && (arg & MP_STREAM_POLL_RDWR)) { if (self->poll_mask && (arg & MP_STREAM_POLL_RDWR)) {

2
tests/extmod/ssl_ioctl.py.exp

@ -3,4 +3,4 @@
10 OSError 10 OSError
4 0 4 0
3 32 3 32
4 32 4 0

Loading…
Cancel
Save