From 62168d44c74d5557fa067cffa36968fad83d0c36 Mon Sep 17 00:00:00 2001 From: jordan Date: Mon, 1 Jun 2026 00:03:56 -0500 Subject: [PATCH 1/2] bsdkm: misc cleanup. --- bsdkm/wolfkmod.c | 29 ++++++++++++++++++++--------- bsdkm/wolfkmod_aes.c | 2 +- bsdkm/x86_vecreg.c | 10 ++++++++++ 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/bsdkm/wolfkmod.c b/bsdkm/wolfkmod.c index 872d68589f..8767f46cb7 100644 --- a/bsdkm/wolfkmod.c +++ b/bsdkm/wolfkmod.c @@ -491,8 +491,9 @@ static int wolfkdriv_attach(device_t dev) attach_out: if (error) { - wolfkdriv_unregister(softc); + device_printf(dev, "error: attach_out: %d\n", error); (void)wolfkmod_cleanup(); + wolfkdriv_unregister(softc); } return (error); @@ -503,16 +504,14 @@ static int wolfkdriv_detach(device_t dev) struct wolfkdriv_softc * softc = NULL; int ret = 0; + /* unregister wolfcrypt algs */ + softc = device_get_softc(dev); ret = wolfkmod_cleanup(); - - if (ret == 0) { - /* unregister wolfcrypt algs */ - softc = device_get_softc(dev); - wolfkdriv_unregister(softc); - } - + wolfkdriv_unregister(softc); #if defined(WOLFSSL_BSDKM_VERBOSE_DEBUG) - device_printf(dev, "info: exiting detach\n"); + device_printf(dev, "info: exiting detach: %d\n", ret); + #else + (void)ret; #endif /* WOLFSSL_BSDKM_VERBOSE_DEBUG */ return (0); @@ -802,6 +801,7 @@ static int wolfkdriv_cbc_work(device_t dev, wolfkdriv_session_t * session, cbc_work_out: /* cleanup. */ + wc_ForceZero(&aes, sizeof(aes)); wc_ForceZero(iv, sizeof(iv)); wc_ForceZero(block, sizeof(block)); @@ -812,6 +812,11 @@ cbc_work_out: error); #endif /* WOLFSSL_BSDKM_VERBOSE_DEBUG */ + if (error < 0) { + /* convert wolfcrypt errors to EINVAL. */ + error = EINVAL; + } + return (error); } @@ -979,6 +984,7 @@ static int wolfkdriv_gcm_work(device_t dev, wolfkdriv_session_t * session, gcm_work_out: /* cleanup. */ + wc_ForceZero(&aes, sizeof(aes)); wc_ForceZero(iv, sizeof(iv)); wc_ForceZero(auth_tag, sizeof(auth_tag)); @@ -989,6 +995,11 @@ gcm_work_out: error); #endif /* WOLFSSL_BSDKM_VERBOSE_DEBUG */ + if (error < 0) { + /* convert wolfcrypt errors to EINVAL. */ + error = EINVAL; + } + return (error); } diff --git a/bsdkm/wolfkmod_aes.c b/bsdkm/wolfkmod_aes.c index 9fb776e988..fc356d6a86 100644 --- a/bsdkm/wolfkmod_aes.c +++ b/bsdkm/wolfkmod_aes.c @@ -212,7 +212,7 @@ static int wolfkdriv_test_aes_gcm(device_t dev, int crid) XMEMSET(resultT, 0, sizeof(resultT)); XMEMSET(resultC, 0, sizeof(resultC)); - XMEMSET(resultC2, 0, sizeof(resultC)); + XMEMSET(resultC2, 0, sizeof(resultC2)); XMEMCPY(resultC2, p, sizeof(p)); /* wolfcrypt encrypt */ diff --git a/bsdkm/x86_vecreg.c b/bsdkm/x86_vecreg.c index c96cc0afd1..d621cee599 100644 --- a/bsdkm/x86_vecreg.c +++ b/bsdkm/x86_vecreg.c @@ -139,6 +139,11 @@ int wolfkmod_vecreg_save(int flags_unused) wolfkmod_print_curthread("wolfkmod_vecreg_save"); #endif + if (fpu_states == NULL) { + printf("info : wolfkmod_vecreg_save: fpu_states null\n"); + return (EINVAL); + } + if (is_fpu_kern_thread(0)) { /* kernel fpu threads are special, do nothing. They own a * persistent, dedicated fpu context. */ @@ -189,6 +194,11 @@ void wolfkmod_vecreg_restore(void) wolfkmod_print_curthread("wolfkmod_vecreg_restore"); #endif + if (fpu_states == NULL) { + printf("info: wolfkmod_vecreg_restore: fpu_states null\n"); + return; + } + if (is_fpu_kern_thread(0)) { /* kernel fpu threads are special, do nothing. They own a * persistent, dedicated fpu context. */ From 27edd641187529f6e6e0ae643564a36aa9bcb704 Mon Sep 17 00:00:00 2001 From: jordan Date: Thu, 4 Jun 2026 11:42:43 -0500 Subject: [PATCH 2/2] bsdkm: call wolfkdriv_unregister before wolfkmod_cleanup, and misc cleanup. --- bsdkm/wolfkmod.c | 4 ++-- bsdkm/x86_vecreg.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bsdkm/wolfkmod.c b/bsdkm/wolfkmod.c index 8767f46cb7..6e19995ca7 100644 --- a/bsdkm/wolfkmod.c +++ b/bsdkm/wolfkmod.c @@ -492,8 +492,8 @@ static int wolfkdriv_attach(device_t dev) attach_out: if (error) { device_printf(dev, "error: attach_out: %d\n", error); - (void)wolfkmod_cleanup(); wolfkdriv_unregister(softc); + (void)wolfkmod_cleanup(); } return (error); @@ -506,8 +506,8 @@ static int wolfkdriv_detach(device_t dev) /* unregister wolfcrypt algs */ softc = device_get_softc(dev); - ret = wolfkmod_cleanup(); wolfkdriv_unregister(softc); + ret = wolfkmod_cleanup(); #if defined(WOLFSSL_BSDKM_VERBOSE_DEBUG) device_printf(dev, "info: exiting detach: %d\n", ret); #else diff --git a/bsdkm/x86_vecreg.c b/bsdkm/x86_vecreg.c index d621cee599..48f0df7b47 100644 --- a/bsdkm/x86_vecreg.c +++ b/bsdkm/x86_vecreg.c @@ -140,7 +140,7 @@ int wolfkmod_vecreg_save(int flags_unused) #endif if (fpu_states == NULL) { - printf("info : wolfkmod_vecreg_save: fpu_states null\n"); + printf("error: wolfkmod_vecreg_save: fpu_states null\n"); return (EINVAL); } @@ -195,7 +195,7 @@ void wolfkmod_vecreg_restore(void) #endif if (fpu_states == NULL) { - printf("info: wolfkmod_vecreg_restore: fpu_states null\n"); + printf("error: wolfkmod_vecreg_restore: fpu_states null\n"); return; }