d6a1889de6
completed by the crypto device, queued on the retq, but freed by the ioctl lwp. The problem manifests as various panics relating to the condvar inside the request. The problem can occur whenever the crypto device completes the request immediately and the ioctl skips the cv_wait(). The problem can be reproduced by enabling cryptosoft and running an openssl speed test. E.g. sysctl -w kern.cryptodevallowsoft=-1 openssl speed -engine cryptodev -evp des-ede3-cbc -multi 64 Add a macro for TAILQ_FOREACH_REVERSE_SAFE() to queue.h, since this was missing and the opencrypto code removes requests from a list while iterating with TAILQ_FOREACH_REVERSE(). Add missing cv_destroy() calls for the key request cleanup. Reviewed by Thor Lancelot Simon. |
||
---|---|---|
.. | ||
criov.c | ||
crypto.c | ||
cryptodev.c | ||
cryptodev.h | ||
cryptosoft_xform.c | ||
cryptosoft.c | ||
cryptosoft.h | ||
deflate.c | ||
deflate.h | ||
files.opencrypto | ||
Makefile | ||
xform.c | ||
xform.h |