Skip to content

Commit fb3adb1

Browse files
committed
[debug] Add verbosity to narrow down Windows and alpine test failures
1 parent 6609dd8 commit fb3adb1

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(void)
744749
{
745750
uc_engine *uc;
@@ -754,6 +759,9 @@ static void test_arm64_pauth(void)
754759
OK(uc_open(UC_ARCH_ARM64, UC_MODE_ARM, &uc));
755760
OK(uc_ctl_set_cpu_model(uc, UC_CPU_ARM64_MAX));
756761

762+
printf("\n");
763+
DEBUG_CHECKPOINT("uc created");
764+
757765
// Check the CPU actually supports any form of PAuth, i.e. any APA or API
758766
// bits are set. At the time of writing, UC_CPU_ARM64_A72 does not support
759767
// PAuth, but UC_CPU_ARM64_MAX does. This is not required for the test,
@@ -792,6 +800,8 @@ static void test_arm64_pauth(void)
792800
test_arm64_pauth_cp_reg_write(uc, APDAKeyLo_EL1, 0xAAAAAAAAAAAAAAAAULL); // == IA
793801
test_arm64_pauth_cp_reg_write(uc, APDAKeyHi_EL1, 0xBBBBBBBBBBBBBBBBULL);
794802

803+
DEBUG_CHECKPOINT("setup complete");
804+
795805
// Verify that paciza and uc_ctl_pauth_sign() result in the same signed
796806
// pointer.
797807

@@ -804,34 +814,57 @@ static void test_arm64_pauth(void)
804814
TEST_CHECK(x1 != some_unsigned_pointer);
805815
TEST_CHECK((x1 & pac_mask) != 0);
806816

817+
DEBUG_CHECKPOINT("paciza done");
818+
807819
uint64_t ptr = some_unsigned_pointer;
820+
printf("test_arm64_pauth: &ptr=%p\n", &ptr); fflush(stdout);
808821
OK(uc_ctl_pauth_sign(uc, ptr, UC_ARM64_PAUTH_KEY_IA, 0, &ptr));
809822
TEST_CHECK(ptr == x1);
810823

824+
DEBUG_CHECKPOINT("uc_ctl_pauth_sign() returned");
825+
811826
// Verify that stripping the PAC results in the original pointer.
812827

813828
OK(uc_ctl_pauth_strip(uc, ptr, UC_ARM64_PAUTH_KEY_IA, &ptr));
814829
TEST_CHECK(ptr == some_unsigned_pointer);
815830

831+
DEBUG_CHECKPOINT("uc_ctl_pauth_strip() returned");
832+
816833
// Verify that authenticating works as expected.
817834

818835
bool valid = true;
819836
OK(uc_ctl_pauth_auth(uc, ptr, UC_ARM64_PAUTH_KEY_IA, 0, &valid));
820837
TEST_CHECK(!valid); // unsigned pointer
838+
839+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned once");
840+
821841
valid = false;
822842
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_IA, 0, &valid));
823843
TEST_CHECK(valid); // signed pointer
844+
845+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned twice");
846+
824847
valid = true;
825848
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_IA, 1337, &valid));
826849
TEST_CHECK(!valid); // wrong diversifier
850+
851+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned thrice");
852+
827853
valid = true;
828854
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_IB, 0, &valid));
829855
TEST_CHECK(!valid); // wrong but enabled key
856+
857+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned four times");
858+
830859
valid = true;
831860
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_DA, 0, &valid));
832861
TEST_CHECK(!valid); // disabled but same value key
833862

863+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned five times");
864+
834865
OK(uc_close(uc));
866+
867+
DEBUG_CHECKPOINT("uc closed");
835868
}
836869

837870
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: signed_ptr=%p\n", 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)