https://gitlab.synchro.net/main/sbbs/-/commit/19bb57967c6d8355cb239185
Added Files:
3rdp/build/cl-do-debug.patch
Modified Files:
src/sbbs3/ftpsrvr.c js_socket.c jsexec.c load_cfg.c mailsrvr.c sbbs.version scfgdefs.h services.c ssl.c ssl.h websrvr.c
Log Message:
Fix TLS handbrake/hang/crash issue
Private key objects in cryptlib are not copied into sessions when
they're added, only the refcount is incremented. These objects
contain a bignum context, which therefore ends up shared across all
instances of the private key. Unfortunately, the locking is on the
session context, not the private key objects, so shared bignum contexts
can cause memory corruption.
Further, even if the locking issue was fixed, the performance handbrake
would still exists... activating sessions that use the same private key
would be serialized, with the results we've been seeing lately.
With this, each session gets a unique private key, which is loaded
from the file. When a session is finished with the key, it is cached
in a list with an epoch, so when the date on the key file changes, old
private keys will be eliminated.
While this solves a lot of issues, logging of certificate generation
and loading issues has regressed to the point where it's effectively
not done at all. Logging was previously passed back to the caller,
but given the much longer call chain to get to where a cert is created,
the extra parameters was just too much. Something better should be
done here at some point.