Skip to content

Commit acabb19

Browse files
committed
[debug] Add verbosity to narrow down Windows and alpine test failures
1 parent 209f87d commit acabb19

File tree

4 files changed

+51
-3
lines changed

4 files changed

+51
-3
lines changed

qemu/target/arm/pauth_helper.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,11 +495,17 @@ uint64_t HELPER(xpacd)(CPUARMState *env, uint64_t a)
495495

496496
uint64_t _uc_pauth_sign(CPUARMState *env, uint64_t ptr, uint64_t diversifier, uint32_t sctlr_bit, ARMPACKey *key, bool data)
497497
{
498+
printf("----- reached _uc_pauth_sign\n"); fflush(stdout);
498499
int el = arm_current_el(env);
500+
printf("----- after obtaining el=%d\n", el); fflush(stdout);
499501
if (!pauth_key_enabled(env, el, sctlr_bit)) {
502+
printf("----- key not enabled\n"); fflush(stdout);
500503
return ptr;
501504
} else {
502-
return pauth_addpac(env, ptr, diversifier, key, data);
505+
printf("----- key enabled\n"); fflush(stdout);
506+
uint64_t res = pauth_addpac(env, ptr, diversifier, key, data);
507+
printf("----- returned from pauth_addpac\n"); fflush(stdout);
508+
return res;
503509
}
504510
}
505511

qemu/target/arm/unicorn_aarch64.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,11 +457,19 @@ bool _uc_pauth_auth(CPUARMState *env, uint64_t ptr, uint64_t diversifier, uint32
457457

458458
static uc_err arm64_pauth_sign(struct uc_struct *uc, uint64_t ptr, int key, uint64_t diversifier, uint64_t *signed_ptr)
459459
{
460+
printf("---- reached arm64_pauth_sign\n"); fflush(stdout);
461+
printf("arm64_pauth_sign: signed_ptr=%p\n", signed_ptr); fflush(stdout);
460462
CPUArchState *env = uc->cpu->env_ptr;
463+
printf("---- obtained env ptr\n"); fflush(stdout);
461464
switch (key) {
462-
case UC_ARM64_PAUTH_KEY_IA:
463-
*signed_ptr = _uc_pauth_sign(env, ptr, diversifier, SCTLR_EnIA, &env->keys.apia, false);
465+
case UC_ARM64_PAUTH_KEY_IA: {
466+
printf("---- before calling _uc_pauth_sign\n"); fflush(stdout);
467+
uint64_t res = _uc_pauth_sign(env, ptr, diversifier, SCTLR_EnIA, &env->keys.apia, false);
468+
printf("---- after calling _uc_pauth_sign\n"); fflush(stdout);
469+
*signed_ptr = res;
470+
printf("---- after storing result\n"); fflush(stdout);
464471
break;
472+
}
465473
case UC_ARM64_PAUTH_KEY_IB:
466474
*signed_ptr = _uc_pauth_sign(env, ptr, diversifier, SCTLR_EnIB, &env->keys.apib, false);
467475
break;

tests/unit/test_arm64.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,11 @@ static bool test_arm64_pauth_cp_reg_update(uc_engine *uc, const uint32_t cpregid
740740
return (((reg.val & setmask) == setmask) && ((reg.val & clearmask) == 0));
741741
}
742742

743+
#define DEBUG_CHECKPOINT(msg) { \
744+
printf("--- " msg "\n"); \
745+
fflush(stdout); \
746+
}
747+
743748
static void test_arm64_pauth_check_cpu_feat(uc_engine *uc)
744749
{
745750
// Check the CPU actually supports any form of PAuth, i.e. any APA or API
@@ -886,9 +891,14 @@ static void test_arm64_pauth_ctl(void)
886891
OK(uc_ctl_set_cpu_model(uc, UC_CPU_ARM64_MAX));
887892
OK(uc_mem_map(uc, code_start, code_len, UC_PROT_ALL));
888893

894+
printf("\n");
895+
DEBUG_CHECKPOINT("uc created");
896+
889897
test_arm64_pauth_check_cpu_feat(uc);
890898
test_arm64_pauth_setup(uc);
891899

900+
DEBUG_CHECKPOINT("setup complete");
901+
892902
// Verify that paciza and uc_ctl_pauth_sign() result in the same signed
893903
// pointer.
894904

@@ -900,35 +910,58 @@ static void test_arm64_pauth_ctl(void)
900910
TEST_CHECK(signed_pointer_paciza != some_unsigned_pointer);
901911
TEST_CHECK((signed_pointer_paciza & pac_mask) != 0);
902912

913+
DEBUG_CHECKPOINT("paciza done");
914+
903915
uint64_t signed_pointer = 0;
916+
printf("test_arm64_pauth: ptr=0x%016"PRIx64" key=%d diversifier=0x%016"PRIx64" signed_ptr=%p\n", some_unsigned_pointer, UC_ARM64_PAUTH_KEY_IA, 0ULL, &signed_pointer); fflush(stdout);
904917
OK(uc_ctl_pauth_sign(uc, some_unsigned_pointer, UC_ARM64_PAUTH_KEY_IA, 0, &signed_pointer));
905918
TEST_CHECK(signed_pointer == signed_pointer_paciza);
906919

920+
DEBUG_CHECKPOINT("uc_ctl_pauth_sign() returned");
921+
907922
// Verify that stripping the PAC results in the original pointer.
908923

909924
uint64_t stripped_pointer = 0;
910925
OK(uc_ctl_pauth_strip(uc, signed_pointer, UC_ARM64_PAUTH_KEY_IA, &stripped_pointer));
911926
TEST_CHECK(stripped_pointer == some_unsigned_pointer);
912927

928+
DEBUG_CHECKPOINT("uc_ctl_pauth_strip() returned");
929+
913930
// Verify that authenticating works as expected.
914931

915932
bool valid = true;
916933
OK(uc_ctl_pauth_auth(uc, some_unsigned_pointer, UC_ARM64_PAUTH_KEY_IA, 0, &valid));
917934
TEST_CHECK(!valid); // unsigned pointer
935+
936+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned once");
937+
918938
valid = false;
919939
OK(uc_ctl_pauth_auth(uc, signed_pointer, UC_ARM64_PAUTH_KEY_IA, 0, &valid));
920940
TEST_CHECK(valid); // signed pointer
941+
942+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned twice");
943+
921944
valid = true;
922945
OK(uc_ctl_pauth_auth(uc, signed_pointer, UC_ARM64_PAUTH_KEY_IA, 1337, &valid));
923946
TEST_CHECK(!valid); // wrong diversifier
947+
948+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned thrice");
949+
924950
valid = true;
925951
OK(uc_ctl_pauth_auth(uc, signed_pointer, UC_ARM64_PAUTH_KEY_IB, 0, &valid));
926952
TEST_CHECK(!valid); // wrong but enabled key
953+
954+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned four times");
955+
927956
valid = true;
928957
OK(uc_ctl_pauth_auth(uc, signed_pointer, UC_ARM64_PAUTH_KEY_DA, 0, &valid));
929958
TEST_CHECK(!valid); // disabled but same value key
930959

960+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned five times");
961+
931962
OK(uc_close(uc));
963+
964+
DEBUG_CHECKPOINT("uc closed");
932965
}
933966

934967
TEST_LIST = {{"test_arm64_until", test_arm64_until},

uc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2987,6 +2987,7 @@ uc_err uc_ctl(uc_engine *uc, uc_control_type control, ...)
29872987
uint64_t diversifier = va_arg(args, uint64_t);
29882988
uint64_t *signed_ptr = va_arg(args, uint64_t *);
29892989
if (uc->pauth_sign != NULL) {
2990+
printf("uc_ctl: ptr=0x%016"PRIx64" key=%d diversifier=0x%016"PRIx64" signed_ptr=%p\n", ptr, key, diversifier, signed_ptr); fflush(stdout);
29902991
err = uc->pauth_sign(uc, ptr, key, diversifier, signed_ptr);
29912992
} else {
29922993
err = UC_ERR_ARG;

0 commit comments

Comments
 (0)