Skip to content

20260904-linuxkm-misc - #11382

Open
douzzer wants to merge 21 commits into
wolfSSL:masterfrom
douzzer:20260904-linuxkm-misc
Open

20260904-linuxkm-misc#11382
douzzer wants to merge 21 commits into
wolfSSL:masterfrom
douzzer:20260904-linuxkm-misc

Conversation

@douzzer

@douzzer douzzer commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

linuxkm/linuxkm_wc_port.h:

  • reduce WC_LINUXKM_MAX_NS_WITHOUT_YIELD from 1 second to 25 ms for better kernel citizenship.
  • add WC_DEBUG_FORCE_KERNEL_SETTINGS for inhibiting #errors on unsupported configurations.
  • add __extension__ annotation to macros that need it.
  • add wc_svr_disallowed_count_reset() and wc_svr_disallowed_count_current().
  • fix CAN_SAVE_VECTOR_REGISTERS() to honor DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_{ON,OFF}.
  • add WC_RELAX_LONG_LOOP() to DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF variant of SAVE_VECTOR_REGISTERS2().
  • allow for fully user-supplied SAVE_VECTOR_REGISTERS() and friends.

linuxkm/module_hooks.c:

  • add WOLFSSL_DEBUG_TRACE_ERROR_CODES coverage for all system error codes used by module_hooks.c and its includes.
  • implement double-run wolfCrypt_IntegrityTest_fips() and wc_RunAllCast_fips() in WC_C_DYNAMIC_FALLBACK configurations, once with acceleration on (leveraging fallback instrumentation to fail the module if any fallbacks occur), and once with it forced off using DISABLE_VECTOR_REGISTERS().

linuxkm/module_hooks.c: when DEBUG_VECTOR_REGISTER_ACCESS_FUZZING or DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON, inhibit DISABLE_VECTOR_REGISTERS() exercises and auditing of wc_svr_disallowed_count_current().

linuxkm/module_hooks.c: implement /sys/module/libwolfssl/FIPS_optest_run_code_audit_accel and /sys/module/libwolfssl/FIPS_optest_run_code_audit_c.

linuxkm/module_hooks.c: in wolfssl_init(), when WOLFSSL_AESNI but not USE_INTEL_SPEEDUP, don't expect wc_svr_disallowed_count_current() to increase for wolfCrypt_IntegrityTest_fips() (no AES in it).

linuxkm/module_hooks.c and wolfcrypt/src/rng_bank.c: fixes for external review of FIPS_OPTEST/LKCAPI coexistence and affinity lock error handling.

in FIPS_optest_trig_handler(), implement assiduous (atomic-based) mutual exclusion with LKCAPI registration.

in wc_rng_bank_checkout(), propagate INTERRUPTED_E from bank->affinity_lock_cb rather than swallowing it -- caller-requested interruption must abort checkout, consistent with the WC_CHECK_FOR_INTR_SIGNALS() handling in the same loop; other affinity lock errors continue to be tolerated (affinity is advisory).

linuxkm/linuxkm-fips-hash.c: in hmac_update_cb(), use wc_HmacUpdate(), not wc_HmacUpdate_fips(), for compatibility with dev-no-post.

linuxkm/lkcapi_glue.c: tolerate !HAVE_FIPS with CONFIG_CRYPTO_FIPS, with a runtime check that kernel fips_enabled is zero.

linuxkm/module_hooks.c:

  • add libwolfssl_inited flag variable and use it for proper error-path cleanup;

  • call wc_linuxkm_allocate_svr_states() and wc_linuxkm_free_svr_states() explicitly in FIPS builds (avoid atomic-context synchronous call to wc_linuxkm_allocate_svr_states() via fipEntry());

  • add missing WOLFSSL_FIPS_DEV_NO_POST gates;

  • in wc_lkm_LockMutex(), return BUSY_E immediately if in_nmi().

tested with

wolfssl-multi-test.sh ...
check-source-text
quantum-safe-wolfssl-all-crypto-only-intelasm-sp-asm-fips-dev-linuxkm-next-clang-tidy
quantum-safe-wolfssl-all-crypto-only-intelasm-sp-asm-sp-linuxkm-6.12-insmod
quantum-safe-wolfssl-all-crypto-only-intelasm-sp-asm-fips-dev-linuxkm-next-insmod
linuxkm-6.15-all-cryptonly-quantum-safe-allintelasm-LKCAPI-insmod-crypto-fuzzer-kmemleak
linuxkm-6.15-all-cryptonly-quantum-safe-allintelasm-LKCAPI-insmod-crypto-fuzzer-ksan
linuxkm-fips-dev-insmod-wolfguard-cust-kernel-3

@wolfSSL-Fenrir-bot wolfSSL-Fenrir-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fenrir Automated Review — PR #11382

Scan targets checked: linuxkm-bugs, linuxkm-src, wolfcrypt-bugs, wolfcrypt-rs-bugs, wolfcrypt-src

Findings: 2
2 finding(s) posted as inline comments (see file-level comments below)

This review was generated automatically by Fenrir. Reported findings require changes before merge.

Comment thread linuxkm/linuxkm_wc_port.h
Comment thread linuxkm/module_hooks.c Outdated
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

@philljj philljj assigned douzzer and unassigned wolfSSL-Bot Sep 6, 2026
* reduce WC_LINUXKM_MAX_NS_WITHOUT_YIELD from 1 second to 25 ms for better kernel citizenship.
* add WC_DEBUG_FORCE_KERNEL_SETTINGS for inhibiting #errors on unsupported configurations.
* add __extension__ annotation to macros that need it.
* add wc_svr_disallowed_count_reset() and wc_svr_disallowed_count_current().
* fix CAN_SAVE_VECTOR_REGISTERS() to honor DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_{ON,OFF}.
* add WC_RELAX_LONG_LOOP() to DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF variant of SAVE_VECTOR_REGISTERS2().
* allow for fully user-supplied SAVE_VECTOR_REGISTERS() and friends.
* add WOLFSSL_DEBUG_TRACE_ERROR_CODES coverage for all system error codes used by module_hooks.c and its includes.
* implement double-run wolfCrypt_IntegrityTest_fips() and wc_RunAllCast_fips() in WC_C_DYNAMIC_FALLBACK configurations, once with acceleration on (leveraging fallback instrumentation to fail the module if any fallbacks occur), and once with it forced off using DISABLE_VECTOR_REGISTERS().
…DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON, inhibit DISABLE_VECTOR_REGISTERS() exercises and auditing of wc_svr_disallowed_count_current().
…run_code_audit_accel and /sys/module/libwolfssl/FIPS_optest_run_code_audit_c.
… USE_INTEL_SPEEDUP, don't expect wc_svr_disallowed_count_current() to increase for wolfCrypt_IntegrityTest_fips() (no AES in it).
…PI coexistence: in FIPS_optest_trig_handler(), implement assiduous (atomic-based) mutual exclusion with LKCAPI registration.
…, not wc_HmacUpdate_fips(), for compatibility with dev-no-post.
…ith a runtime check that kernel fips_enabled is zero.
* add libwolfssl_inited flag variable and use it for proper error-path cleanup;

* call wc_linuxkm_allocate_svr_states() and wc_linuxkm_free_svr_states() explicitly in FIPS builds (avoid atomic-context synchronous call to wc_linuxkm_allocate_svr_states() via fipEntry());

* add missing WOLFSSL_FIPS_DEV_NO_POST gates;

* in wc_lkm_LockMutex(), return BUSY_E immediately if in_nmi().
…batching several chunks within a single SAVE_VECTOR_REGISTERS2() bracket (entails adding WALK_ATOMIC to calls that affect walk dynamics during the locked batches).
…ERROR_CODES_PER_FILE and WOLFSSL_DEBUG_TRACE_ERROR_CODES_THIS_FILE (file-scoped code traces).
…WOLFSSL_ATOMIC_LOAD() and WOLFSSL_ATOMIC_STORE(), use __ATOMIC_SEQ_CST rather than __ATOMIC_CONSUME/__ATOMIC_RELEASE, for consistency with semantics of the primary C11 bindings to atomic_load() and atomic_store().
…rly, and add WC_LINUXKM_HAVE_MY_KALLSYMS_LOOKUP_NAME.
…S_optest_trig_audit_c_attr to use distinct handlers that pass distinct mode arguments to a multi-personality FIPS_optest_trig_common(), properly implementing the SVR-auditing variants of the FIPS_optest_run_code sysfs node.
…ECTOR_REGISTER_ACCESS_ALWAYS_{OFF,ON} settings.
* always call wolfCrypt_Init() directly, even in TLS builds, to assure
  mutex-free scheduler context during allocations;

* convert sysfs nodes from struct kobj_attribute to struct module_attribute,
  matching the module_sysfs_ops dispatch on THIS_MODULE->mkobj.kobj, for
  compatibility with CONFIG_CFI_CLANG (kCFI) kernels.
@douzzer
douzzer force-pushed the 20260904-linuxkm-misc branch from 2c52057 to 8864af4 Compare September 10, 2026 04:37
Comment thread linuxkm/linuxkm_wc_port.h
Comment thread linuxkm/module_hooks.c Outdated

@wolfSSL-Fenrir-bot wolfSSL-Fenrir-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fenrir Automated Review — PR #11382

Scan targets checked: linuxkm-src, linuxkm-bugs, wolfcrypt-src, wolfcrypt-bugs, wolfssl-src, wolfssl-bugs

Findings: 3
3 finding(s) posted as inline comments (see file-level comments below)

This review was generated automatically by Fenrir. Reported findings require changes before merge.

Comment thread linuxkm/lkcapi_aes_glue.c
}

#if WC_LINUXKM_GCM_SVR_BATCH > 0
if (SAVE_VECTOR_REGISTERS2() == 0) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GCM batching moves AAD allocation into atomic context · Kernel memory safety

SAVE_VECTOR_REGISTERS2() makes fragmented-AAD allocation and freeing run with preemption disabled, forcing unreliable GFP_ATOMIC allocation. With vmalloc storage, free() reaches kvfree() outside its permitted task context. Unlike known #9680, this concerns allocation context, not bounds.

Related known finding #12850 (similar but distinct): Both affect AesGcmCrypt_1 GCM processing, but #12850 writes unauthenticated plaintext before final tag verification; this performs AAD allocation/free under a saved-vector atomic context. The faulting operations, root causes, and fixes differ.

Suggested fix: Allocate and free the AAD bounce buffer outside the saved-vector region; bracket only the GCM operations that require SIMD.
Basis: Linux Memory Management APIs: GFP_ATOMIC is a non-sleeping emergency-pool allocation, while kvfree() requires preemptible task or non-NMI interrupt context.

Comment thread linuxkm/module_hooks.c
Comment thread linuxkm/module_hooks.c
ret = linuxkm_sysfs_install_attr(&FIPS_optest_trig_audit_accel_attr.attr, &installed_sysfs_FIPS_optest_trig_audit_accel_files);
if (ret != 0) {
pr_err("ERROR: linuxkm_sysfs_install_attr() failed for %s (code %d).\n", FIPS_optest_trig_audit_accel_attr.attr.name, ret);
(void)libwolfssl_cleanup();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New optest sysfs nodes lack init-failure rollback · Resource leaks on error paths

The new audit attributes are installed sequentially, but later failures call only libwolfssl_cleanup(), which removes no sysfs files. Successful earlier installs survive the init abort. This is adjacent to known #7892 but covers the newly added audit nodes.

Related known finding #7892 (similar but distinct): Both are wolfssl_init error-path rollback omissions involving sysfs state, but #7892 covers existing post-initialization and FIPS optest-trigger paths, while this covers newly added audit attributes installed sequentially. The installed nodes and rollback paths differ, so a separate patch is required.

Suggested fix: Rollback every optest attribute whose installed flag is set before any post-install initialization error returns.
Basis: Linux sysfs API pairing contract: each successful sysfs_create_file() installation is released with sysfs_remove_file().

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants