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

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George 2023-08-09 13:19:18 +10:00
parent 20d3a6b196
commit d529c20674
2 changed files with 10 additions and 5 deletions

View File

@ -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)) {

View File

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