aboutsummaryrefslogtreecommitdiff
path: root/src/test/test_sandbox.c
diff options
context:
space:
mode:
authorMicah Elizabeth Scott <beth@torproject.org>2023-05-28 16:35:31 -0700
committerMicah Elizabeth Scott <beth@torproject.org>2023-05-28 20:02:02 -0700
commita397a92be2032e781479fa4d53a04f9b369ea1ac (patch)
treed3f35ebb5bfb99af84d911c96033ac53b28672fd /src/test/test_sandbox.c
parenta3513dea54c1de6da4f5224624f545cd0d527891 (diff)
downloadtor-a397a92be2032e781479fa4d53a04f9b369ea1ac.tar.gz
tor-a397a92be2032e781479fa4d53a04f9b369ea1ac.zip
hs_pow: Update for equix API to fix issue 40794
This change adapts the hs_pow layer and unit tests to API changes in hashx and equix which modify the fault recovery responsibilities and reporting behaivor. This and the corresponding implementation changes in hashx and equix form the fix for #40794, both solving the segfault and giving hashx a way to report those failures up the call chain without them being mistaken for a different error (unusable seed) that would warrant a retry. To handle these new late compiler failures with a minimum of fuss or inefficiency, the failover is delegated to the internals of hashx and tor needs only pass in a EQUIX_CTX_TRY_COMPILE flag to get the behavior that tor was previously responsible for implementing. Signed-off-by: Micah Elizabeth Scott <beth@torproject.org>
Diffstat (limited to 'src/test/test_sandbox.c')
-rw-r--r--src/test/test_sandbox.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/test/test_sandbox.c b/src/test/test_sandbox.c
index a28c9b6e41..64182ecc91 100644
--- a/src/test/test_sandbox.c
+++ b/src/test/test_sandbox.c
@@ -315,32 +315,27 @@ test_sandbox_crypto_equix(void *arg)
{{ 0x62c5, 0x86d1, 0x5752, 0xe1f0, 0x12da, 0x8f33, 0x7336, 0xf161 }},
};
- equix_solution sols_actual[EQUIX_MAX_SOLS] = { 0 };
+ equix_solutions_buffer output;
equix_ctx *solve_ctx = NULL, *verify_ctx = NULL;
- /* TODO: A subsequent change will modify these flags to use an auto fallback
- * that will be built into our fork of equix. (This implements a
- * performant and low-complexity way to share the generated program
- * state during fallback instead of re-generating it.)
- */
- solve_ctx = equix_alloc(EQUIX_CTX_SOLVE | EQUIX_CTX_COMPILE);
+ solve_ctx = equix_alloc(EQUIX_CTX_SOLVE | EQUIX_CTX_TRY_COMPILE);
tt_ptr_op(solve_ctx, OP_NE, NULL);
- tt_ptr_op(solve_ctx, OP_NE, EQUIX_NOTSUPP);
- int retval = equix_solve(solve_ctx, challenge_literal,
- challenge_len, sols_actual);
- tt_int_op(retval, OP_EQ, num_sols);
- tt_mem_op(sols_actual, OP_EQ, sols_expected,
+ equix_result result;
+ memset(&output, 0xEE, sizeof output);
+ result = equix_solve(solve_ctx, challenge_literal, challenge_len, &output);
+ tt_int_op(result, OP_EQ, EQUIX_OK);
+ tt_int_op(output.count, OP_EQ, num_sols);
+ tt_int_op(output.flags, OP_EQ, 0); /* EQUIX_SOLVER_DID_USE_COMPILER unset */
+ tt_mem_op(output.sols, OP_EQ, sols_expected,
num_sols * sizeof(equix_solution));
- verify_ctx = equix_alloc(EQUIX_CTX_VERIFY | EQUIX_CTX_COMPILE);
+ verify_ctx = equix_alloc(EQUIX_CTX_VERIFY | EQUIX_CTX_TRY_COMPILE);
tt_ptr_op(verify_ctx, OP_NE, NULL);
- tt_ptr_op(verify_ctx, OP_NE, EQUIX_NOTSUPP);
/* Test one of the solutions randomly */
- equix_result result;
const unsigned sol_i = crypto_rand_int(num_sols);
- equix_solution *sol = &sols_actual[sol_i];
+ equix_solution *sol = &output.sols[sol_i];
result = equix_verify(verify_ctx, challenge_literal,
challenge_len, sol);