20260904-linuxkm-misc - #11382
Conversation
* 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).
…al 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).
…, 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().
wolfSSL-Fenrir-bot
left a comment
There was a problem hiding this comment.
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.
| #endif | ||
| #endif | ||
|
|
||
| #if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON) && \ |
There was a problem hiding this comment.
Mutual-exclusion #error for DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON/_OFF was dropped · Logic errors
The guard rejecting DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON together with _ALWAYS_OFF was overwritten by the new LKCAPI check and has no replacement anywhere in the tree. Defining both now builds silently with contradictory semantics: CAN_SAVE_VECTOR_REGISTERS() resolves to 0 (line 838, OFF first) while SAVE_VECTOR_REGISTERS/SAVE_VECTOR_REGISTERS2/DISABLE_VECTOR_REGISTERS resolve to the ALWAYS_ON variants that really save and pr_err on every disable.
Fix: Restore an #error for DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON and _ALWAYS_OFF both being defined, alongside the two new checks.
| * algorithm consumers. | ||
| */ | ||
|
|
||
| if ((attr == &FIPS_optest_trig_audit_accel_attr) || |
There was a problem hiding this comment.
New FIPS optest audit nodes dispatch on attr, which is not the kobj_attribute for /sys/module attributes · Cryptographic correctness
Attributes on THIS_MODULE->mkobj.kobj are dispatched by module_attr_store(), which invokes the store callback as store(attribute, mk, buf, len), so the handler's second parameter holds &THIS_MODULE->mkobj, not the kobj_attribute. Every attr == &FIPS_optest_trig_audit_*_attr test is therefore always false: FIPS_optest_run_code_audit_c never calls DISABLE_VECTOR_REGISTERS() and FIPS_optest_run_code_audit_accel never checks wc_svr_disallowed_count_current(), yet both return success.
Fix: Give each of the three sysfs nodes its own thin store handler that passes an explicit mode argument to a shared worker instead of comparing attr.
|
linuxkm/linuxkm_wc_port.h:WC_LINUXKM_MAX_NS_WITHOUT_YIELDfrom 1 second to 25 ms for better kernel citizenship.WC_DEBUG_FORCE_KERNEL_SETTINGSfor inhibiting#errorson unsupported configurations.__extension__annotation to macros that need it.wc_svr_disallowed_count_reset()andwc_svr_disallowed_count_current().CAN_SAVE_VECTOR_REGISTERS()to honorDEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_{ON,OFF}.WC_RELAX_LONG_LOOP()toDEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFFvariant ofSAVE_VECTOR_REGISTERS2().SAVE_VECTOR_REGISTERS()and friends.linuxkm/module_hooks.c:WOLFSSL_DEBUG_TRACE_ERROR_CODEScoverage for all system error codes used bymodule_hooks.cand its includes.wolfCrypt_IntegrityTest_fips()andwc_RunAllCast_fips()inWC_C_DYNAMIC_FALLBACKconfigurations, once with acceleration on (leveraging fallback instrumentation to fail the module if any fallbacks occur), and once with it forced off usingDISABLE_VECTOR_REGISTERS().linuxkm/module_hooks.c: whenDEBUG_VECTOR_REGISTER_ACCESS_FUZZINGorDEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON, inhibitDISABLE_VECTOR_REGISTERS()exercises and auditing ofwc_svr_disallowed_count_current().linuxkm/module_hooks.c: implement/sys/module/libwolfssl/FIPS_optest_run_code_audit_acceland/sys/module/libwolfssl/FIPS_optest_run_code_audit_c.linuxkm/module_hooks.c: inwolfssl_init(), whenWOLFSSL_AESNIbut notUSE_INTEL_SPEEDUP, don't expectwc_svr_disallowed_count_current()to increase forwolfCrypt_IntegrityTest_fips()(no AES in it).linuxkm/module_hooks.candwolfcrypt/src/rng_bank.c: fixes for external review ofFIPS_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(), propagateINTERRUPTED_Efrombank->affinity_lock_cbrather than swallowing it -- caller-requested interruption must abort checkout, consistent with theWC_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: inhmac_update_cb(), usewc_HmacUpdate(), notwc_HmacUpdate_fips(), for compatibility withdev-no-post.linuxkm/lkcapi_glue.c: tolerate !HAVE_FIPSwithCONFIG_CRYPTO_FIPS, with a runtime check that kernelfips_enabledis zero.linuxkm/module_hooks.c:add
libwolfssl_initedflag variable and use it for proper error-path cleanup;call
wc_linuxkm_allocate_svr_states()andwc_linuxkm_free_svr_states()explicitly in FIPS builds (avoid atomic-context synchronous call towc_linuxkm_allocate_svr_states()viafipEntry());add missing
WOLFSSL_FIPS_DEV_NO_POSTgates;in
wc_lkm_LockMutex(), returnBUSY_Eimmediately ifin_nmi().tested with