From 57baae90f16c3f19d2dea10eab1c90bdf302ba85 Mon Sep 17 00:00:00 2001 From: Daniel Pouzzner Date: Mon, 14 Apr 2025 00:01:40 -0500 Subject: [PATCH] linuxkm/lkcapi_glue.c: update calls to scatterwalk_map() and scatterwalk_unmap() for linux commit 7450ebd29c (merged for Linux 6.15); configure.ac: fix --disable-linuxkm-lkcapi-register; .wolfssl_known_macro_extras: fix order. --- .wolfssl_known_macro_extras | 2 +- configure.ac | 4 ++-- linuxkm/lkcapi_glue.c | 36 +++++++++++++++++++++++++++++++++--- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/.wolfssl_known_macro_extras b/.wolfssl_known_macro_extras index c77a46658..d32c167e6 100644 --- a/.wolfssl_known_macro_extras +++ b/.wolfssl_known_macro_extras @@ -569,9 +569,9 @@ WOLFSENTRY_H WOLFSENTRY_NO_JSON WOLFSSL_32BIT_MILLI_TIME WOLFSSL_AARCH64_PRIVILEGE_MODE -WOLFSSL_AES_CTR_EXAMPLE WOLFSSL_AESNI_BY4 WOLFSSL_AESNI_BY6 +WOLFSSL_AES_CTR_EXAMPLE WOLFSSL_AFTER_DATE_CLOCK_SKEW WOLFSSL_ALGO_HW_MUTEX WOLFSSL_ALLOW_CRIT_AIA diff --git a/configure.ac b/configure.ac index 3cf5971ad..0740c0c29 100644 --- a/configure.ac +++ b/configure.ac @@ -9364,9 +9364,9 @@ fi AC_ARG_ENABLE([linuxkm-lkcapi-register], [AS_HELP_STRING([--enable-linuxkm-lkcapi-register],[Register wolfCrypt implementations with the Linux Kernel Crypto API backplane. Possible values are "none", "all", "cbc(aes)", "cfb(aes)", "gcm(aes)", and "xts(aes)", or a comma-separate combination. (default: none)])], [ENABLED_LINUXKM_LKCAPI_REGISTER=$enableval], - [ENABLED_LINUXKM_LKCAPI_REGISTER=none] + [ENABLED_LINUXKM_LKCAPI_REGISTER=no] ) -if test "$ENABLED_LINUXKM_LKCAPI_REGISTER" != "none" +if test "$ENABLED_LINUXKM_LKCAPI_REGISTER" != "no" then AM_CFLAGS="$AM_CFLAGS -DLINUXKM_LKCAPI_REGISTER" diff --git a/linuxkm/lkcapi_glue.c b/linuxkm/lkcapi_glue.c index 00d846ca5..58b267198 100644 --- a/linuxkm/lkcapi_glue.c +++ b/linuxkm/lkcapi_glue.c @@ -1145,7 +1145,12 @@ static int AesGcmCrypt_1(struct aead_request *req, int decrypt_p, int rfc4106_p) if (req->src->length >= assoclen && req->src->length) { scatterwalk_start(&assocSgWalk, req->src); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) + scatterwalk_map(&assocSgWalk); + assoc = assocSgWalk.addr; +#else assoc = scatterwalk_map(&assocSgWalk); +#endif if (unlikely(IS_ERR(assoc))) { pr_err("%s: scatterwalk_map failed: %ld\n", crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm)), @@ -1177,8 +1182,13 @@ static int AesGcmCrypt_1(struct aead_request *req, int decrypt_p, int rfc4106_p) if (assocmem) free(assocmem); - else + else { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) + scatterwalk_unmap(&assocSgWalk); +#else scatterwalk_unmap(assoc); +#endif + } if (unlikely(err)) { pr_err("%s: %s failed: %d\n", @@ -1328,7 +1338,12 @@ static int AesGcmCrypt_1(struct aead_request *req, int decrypt_p, int rfc4106_p) (req->dst->length >= req->assoclen + req->cryptlen)) { scatterwalk_start(&in_walk, req->src); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) + scatterwalk_map(&in_walk); + in_map = in_walk.addr; +#else in_map = scatterwalk_map(&in_walk); +#endif if (unlikely(IS_ERR(in_map))) { pr_err("%s: scatterwalk_map failed: %ld\n", crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm)), @@ -1339,7 +1354,12 @@ static int AesGcmCrypt_1(struct aead_request *req, int decrypt_p, int rfc4106_p) in_text = in_map + req->assoclen; scatterwalk_start(&out_walk, req->dst); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) + scatterwalk_map(&out_walk); + out_map = out_walk.addr; +#else out_map = scatterwalk_map(&out_walk); +#endif if (unlikely(IS_ERR(out_map))) { pr_err("%s: scatterwalk_map failed: %ld\n", crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm)), @@ -1425,10 +1445,20 @@ out: free(sg_buf); } else { - if (in_map) + if (in_map) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) + scatterwalk_unmap(&in_walk); +#else scatterwalk_unmap(in_map); - if (out_map) +#endif + } + if (out_map) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) + scatterwalk_unmap(&out_walk); +#else scatterwalk_unmap(out_map); +#endif + } } km_AesFree(&aes_copy);