Merge pull request #11103 from douzzer/20260806-linuxkm-DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_foo

20260806-linuxkm-DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_foo
pull/11105/head
David Garske 2026-08-06 21:41:49 -07:00 committed by GitHub
commit e260a8e103
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 83 additions and 10 deletions

View File

@ -247,6 +247,8 @@ CUSTOM_ENTROPY_TIMEHIRES
CY_USING_HAL
DCP_USE_DCACHE
DEBUG_FORCE_VECTOR_REGISTER_ACCESS_FUZZING
DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF
DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON
DILITHIUM_MUL_11_SLOW
DILITHIUM_MUL_44_SLOW
DILITHIUM_MUL_QINV_SLOW

View File

@ -762,16 +762,63 @@
#ifndef CAN_SAVE_VECTOR_REGISTERS
#define CAN_SAVE_VECTOR_REGISTERS() wc_can_save_vector_registers_x86()
#endif
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON) && \
defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF)
#error Conflicting settings for DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_foo
#endif
#ifndef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
if (_svr_ret != 0) { \
fail_clause \
} \
}
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
if (_svr_ret != 0) { \
pr_err("ERROR: SAVE_VECTOR_REGISTERS() with DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON " \
"failed, code %d in %s at %s L %d\n", _svr_ret, __func__, __FILE__, __LINE__); \
dump_stack(); \
{ \
fail_clause \
} \
} \
}
#elif defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF)
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
int _svr_ret = WC_ACCEL_INHIBIT_E; \
(void)_svr_ret; \
fail_clause \
}
#else
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
if (_svr_ret != 0) { \
fail_clause \
} \
}
#endif
#endif
#ifndef SAVE_VECTOR_REGISTERS2
#ifdef DEBUG_VECTOR_REGISTER_ACCESS_FUZZING
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
#define SAVE_VECTOR_REGISTERS2() \
({ \
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
if (_svr_ret != 0) { \
pr_err("ERROR: SAVE_VECTOR_REGISTERS2() with DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON " \
"returned %d in %s at %s L %d\n", _svr_ret, __func__, __FILE__, __LINE__); \
dump_stack(); \
} \
_svr_ret; \
})
#elif defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF)
#define SAVE_VECTOR_REGISTERS2() WC_ACCEL_INHIBIT_E
#elif defined(DEBUG_VECTOR_REGISTER_ACCESS_FUZZING)
#define SAVE_VECTOR_REGISTERS2() wc_save_vector_registers_x86(WC_SVR_FLAG_FUZZ)
#else
#define SAVE_VECTOR_REGISTERS2() wc_save_vector_registers_x86(WC_SVR_FLAG_NONE)
@ -782,7 +829,21 @@
#endif
#ifndef DISABLE_VECTOR_REGISTERS
#define DISABLE_VECTOR_REGISTERS() wc_save_vector_registers_x86(WC_SVR_FLAG_INHIBIT)
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
/* There must be no DISABLE_VECTOR_REGISTERS() calls in a
* DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON build -- ERROR if any
* calls occur.
*/
#define DISABLE_VECTOR_REGISTERS() \
({ \
pr_err("ERROR: DISABLE_VECTOR_REGISTERS() with DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON " \
"in %s at %s L %d\n", __func__, __FILE__, __LINE__); \
dump_stack(); \
wc_save_vector_registers_x86(WC_SVR_FLAG_INHIBIT); \
})
#else
#define DISABLE_VECTOR_REGISTERS() wc_save_vector_registers_x86(WC_SVR_FLAG_INHIBIT)
#endif
#endif
#ifndef REENABLE_VECTOR_REGISTERS
#define REENABLE_VECTOR_REGISTERS() wc_restore_vector_registers_x86(WC_SVR_FLAG_INHIBIT)

View File

@ -401,11 +401,17 @@ WARN_UNUSED_RESULT int wc_save_vector_registers_x86(enum wc_svr_flags flags)
__builtin_unreachable();
}
#ifndef DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON
/* EINTR during optest, which is exercised by the kernel test harness, acts
* like a failed save, which would emit (and indeed be) an ERROR in
* DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON builds.
*/
{
int ret = WC_CHECK_FOR_INTR_SIGNALS();
if (ret)
return ret;
}
#endif
WC_RELAX_LONG_LOOP();

View File

@ -25621,7 +25621,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_bank_test(void)
#endif
ret = wc_rng_bank_init(bank, WC_RNG_BANK_STATIC_SIZE,
#ifndef DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON
WC_RNG_BANK_FLAG_NO_VECTOR_OPS |
#endif
WC_RNG_BANK_FLAG_CAN_WAIT,
10, HEAP_HINT, INVALID_DEVID);
if (ret != 0)
@ -25660,7 +25662,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_bank_test(void)
defined(HAVE_HASHDRBG) && \
defined(WC_NO_INTERNAL_FUNCTION_POINTERS) && \
defined(HAVE_FIPS) && \
FIPS_VERSION3_LT(7,0,0)
FIPS_VERSION3_LT(7,0,0) && \
!defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
#ifdef WOLFSSL_DRBG_SHA512
if (rng_inst->rng.drbgType == WC_DRBG_SHA512) {
if (((struct DRBG_SHA512_internal *)rng_inst->rng.drbg512)->sha512.sha_method != 5 /* SHA512_C */)
@ -25672,7 +25676,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_bank_test(void)
if (((struct DRBG_internal *)rng_inst->rng.drbg)->sha256.sha_method != 7 /* SHA256_C */)
ERROR_OUT(WC_TEST_RET_ENC_I(((struct DRBG_internal *)rng_inst->rng.drbg)->sha256.sha_method), out);
}
#endif
#endif /* USE_INTEL_SPEEDUP && ... && !DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON */
ret = wc_RNG_GenerateBlock(WC_RNG_BANK_INST_TO_RNG(rng_inst), outbuf1, sizeof(outbuf1));
if (ret != 0)