David Schwartz wrote:
Darryl Miles wrote:

This is how everything else works, it's odd to say it's somehow a limitation
of OpenSSL that it works the same way everything else works. Try to read to
a string in one thread while you write to it from another. The general rule
of thread synchronization is that it is your responsibility to serialize
access to the same object from concurrent threads and the library's job to
synchronize accesses to distinct objects. OpenSSL follows this general rule.

Kernel objects are the exception, only because we cannot allow a program
(broken or valid) to screw up kernel objects. So the kernel has no choice
but to "overserialize".

FYI modern kernel's do not need to serialize (let alone "overserialize", whatever that means, is that a computer science term?). I.e. the read() write() code paths for the same file-descriptor/handle can be called simultaneously from two or more threads without any harm to the kernel. Sure fine grained serialization of the workings inside the kernel might take place, but thats is implementation detail, irrelevant to the contract the kernel API provides its users.

This is merely a result of prudent multi-threaded coding inside the kernel presumably as a result of a "performance centric usage case" that customers/users want.

I advocate that some users would find it useful to be able to invoke SSL_read() and SSL_write() from exactly two threads on the same 'SSL *' simultaneously. There is merit in this and as things stands OpenSSL does not allow it due to a design choice (aka "design limitation").

I do not advocate that expanding the above scope to allowing more than two threads or two threads both SSL_write() or both SSL_read() would be useful. I see no merit in that (one factor in this is that the nature of SSL/TLS is that a sequence of packets are serialized on the wire and that checksums/state from the last packet influence the encoding of the next, this is part of the "tamper proof security" provided by SSL/TLS, so there is no case to parallelize).

There is no reason why OpenSSL can not allow two threaded operation if it were designed differently. So I stand by my usage of the word "limitation".



Your application then also has to evaluate its intent to send data, you don't always have something more to send. If you do then you need to indicate to the OS to wake me up if I can push more data down into the kernel buffer.

No, that is not how OpenSSL works.

Who was talking about OpenSSL here ? "Your application ...." is the clue here, see if you can get a clue, try reading it again in context was the topic being discussed.


Darryl
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to