Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .wolfssl_known_macro_extras
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
77 changes: 69 additions & 8 deletions linuxkm/linuxkm_wc_port.h
Original file line number Diff line number Diff line change
Expand Up @@ -762,16 +762,63 @@
#ifndef CAN_SAVE_VECTOR_REGISTERS
#define CAN_SAVE_VECTOR_REGISTERS() wc_can_save_vector_registers_x86()
Comment thread
douzzer marked this conversation as resolved.
#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) { \
Comment thread
douzzer marked this conversation as resolved.
Comment thread
douzzer marked this conversation as resolved.
Comment thread
douzzer marked this conversation as resolved.
Comment thread
douzzer marked this conversation as resolved.
int _svr_ret = WC_ACCEL_INHIBIT_E; \
Comment thread
douzzer marked this conversation as resolved.
(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
Comment thread
douzzer marked this conversation as resolved.
Comment thread
douzzer marked this conversation as resolved.
#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)
Expand All @@ -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() \
Comment thread
douzzer marked this conversation as resolved.
Comment thread
douzzer marked this conversation as resolved.
Comment thread
douzzer marked this conversation as resolved.
Comment thread
douzzer marked this conversation as resolved.
({ \
pr_err("ERROR: DISABLE_VECTOR_REGISTERS() with DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON " \
Comment thread
douzzer marked this conversation as resolved.
"in %s at %s L %d\n", __func__, __FILE__, __LINE__); \
dump_stack(); \
Comment thread
douzzer marked this conversation as resolved.
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)
Expand Down
6 changes: 6 additions & 0 deletions linuxkm/x86_vector_register_glue.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
8 changes: 6 additions & 2 deletions wolfcrypt/test/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Comment thread
douzzer marked this conversation as resolved.
#endif
WC_RNG_BANK_FLAG_CAN_WAIT,
10, HEAP_HINT, INVALID_DEVID);
if (ret != 0)
Expand Down Expand Up @@ -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 */)
Expand All @@ -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)
Expand Down
Loading