Fallback to software for more GCM and CCM requests.

ccr(4) uses software to handle GCM and CCM requests not supported by
the crypto engine (e.g. with only AAD and no payload).  This change
adds a fallback for a few more requests such as those with more SGL
entries than can fit in a work request (this can happen for GCM when
decrypting a TLS record split across 15 or more packets).

Reported by:	Chelsio QA
Reviewed by:	np
Sponsored by:	Chelsio Communications
Differential Revision:	https://reviews.freebsd.org/D26582
This commit is contained in:
John Baldwin 2020-09-29 21:51:32 +00:00
parent 3917c9ba65
commit 0e99339684
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=366269

View File

@ -2777,7 +2777,7 @@ ccr_process(device_t dev, struct cryptop *crp, int hint)
return (0);
}
error = ccr_gcm(sc, s, crp);
if (error == EMSGSIZE) {
if (error == EMSGSIZE || error == EFBIG) {
counter_u64_add(sc->stats_sw_fallback, 1);
mtx_unlock(&s->lock);
ccr_gcm_soft(s, crp);
@ -2796,7 +2796,7 @@ ccr_process(device_t dev, struct cryptop *crp, int hint)
csp->csp_cipher_klen);
}
error = ccr_ccm(sc, s, crp);
if (error == EMSGSIZE) {
if (error == EMSGSIZE || error == EFBIG) {
counter_u64_add(sc->stats_sw_fallback, 1);
mtx_unlock(&s->lock);
ccr_ccm_soft(s, crp);