New submission from Alexey Baldin <alexey...@gmail.com>:

_ssl.c has thread-usafe code in implementation of read, write and other 
methods. E.g. 'write' method:

2099        PySSL_BEGIN_ALLOW_THREADS
2100        len = SSL_write(self->ssl, b->buf, (int)b->len);
2101        _PySSL_UPDATE_ERRNO_IF(len <= 0, self, len);
2102        PySSL_END_ALLOW_THREADS
2103        err = self->ssl_errno;

_PySSL_UPDATE_ERRNO_IF updates self->ssl_errno without lock. Similar code used 
in 'read' method. Later self->ssl_errno is used for decision on retrying the 
operation. As result, SSL_write can be incorrectly repeated because ssl_errno 
was updated by 'read' method to SSL_ERROR_WANT_READ from another thread.

Looks like commit e6eb48c10dc389d1d70657593de6a6cb3087d3d1 is the cause.

----------
assignee: christian.heimes
components: SSL
messages: 309805
nosy: Alexey Baldin, christian.heimes
priority: normal
severity: normal
status: open
title: SSLSocket read/write thread-unsafety
type: behavior
versions: Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue32533>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to