From 62168d44c74d5557fa067cffa36968fad83d0c36 Mon Sep 17 00:00:00 2001 From: jordan Date: Mon, 1 Jun 2026 00:03:56 -0500 Subject: [PATCH] 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 872d68589f4..8767f46cb73 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 @@ static int wolfkdriv_cbc_work(device_t dev, wolfkdriv_session_t * session, 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 @@ static int wolfkdriv_gcm_work(device_t dev, wolfkdriv_session_t * session, 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 9fb776e9885..fc356d6a86d 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 c96cc0afd10..d621cee5990 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. */