Skip to content

Commit bb34ca0

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

File tree

3 files changed

+48
-3
lines changed

3 files changed

+48
-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: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,11 +457,18 @@ 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);
460461
CPUArchState *env = uc->cpu->env_ptr;
462+
printf("---- obtained env ptr\n"); fflush(stdout);
461463
switch (key) {
462-
case UC_ARM64_PAUTH_KEY_IA:
463-
*signed_ptr = _uc_pauth_sign(env, ptr, diversifier, SCTLR_EnIA, &env->keys.apia, false);
464+
case UC_ARM64_PAUTH_KEY_IA: {
465+
printf("---- before calling _uc_pauth_sign\n"); fflush(stdout);
466+
uint64_t res = _uc_pauth_sign(env, ptr, diversifier, SCTLR_EnIA, &env->keys.apia, false);
467+
printf("---- after calling _uc_pauth_sign\n"); fflush(stdout);
468+
*signed_ptr = res;
469+
printf("---- after storing result\n"); fflush(stdout);
464470
break;
471+
}
465472
case UC_ARM64_PAUTH_KEY_IB:
466473
*signed_ptr = _uc_pauth_sign(env, ptr, diversifier, SCTLR_EnIB, &env->keys.apib, false);
467474
break;

tests/unit/test_arm64.c

Lines changed: 32 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,56 @@ 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;
808820
OK(uc_ctl_pauth_sign(uc, ptr, UC_ARM64_PAUTH_KEY_IA, 0, &ptr));
809821
TEST_CHECK(ptr == x1);
810822

823+
DEBUG_CHECKPOINT("uc_ctl_pauth_sign() returned");
824+
811825
// Verify that stripping the PAC results in the original pointer.
812826

813827
OK(uc_ctl_pauth_strip(uc, ptr, UC_ARM64_PAUTH_KEY_IA, &ptr));
814828
TEST_CHECK(ptr == some_unsigned_pointer);
815829

830+
DEBUG_CHECKPOINT("uc_ctl_pauth_strip() returned");
831+
816832
// Verify that authenticating works as expected.
817833

818834
bool valid = true;
819835
OK(uc_ctl_pauth_auth(uc, ptr, UC_ARM64_PAUTH_KEY_IA, 0, &valid));
820836
TEST_CHECK(!valid); // unsigned pointer
837+
838+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned once");
839+
821840
valid = false;
822841
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_IA, 0, &valid));
823842
TEST_CHECK(valid); // signed pointer
843+
844+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned twice");
845+
824846
valid = true;
825847
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_IA, 1337, &valid));
826848
TEST_CHECK(!valid); // wrong diversifier
849+
850+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned thrice");
851+
827852
valid = true;
828853
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_IB, 0, &valid));
829854
TEST_CHECK(!valid); // wrong but enabled key
855+
856+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned four times");
857+
830858
valid = true;
831859
OK(uc_ctl_pauth_auth(uc, x1, UC_ARM64_PAUTH_KEY_DA, 0, &valid));
832860
TEST_CHECK(!valid); // disabled but same value key
833861

862+
DEBUG_CHECKPOINT("uc_ctl_pauth_auth() returned five times");
863+
834864
OK(uc_close(uc));
865+
866+
DEBUG_CHECKPOINT("uc closed");
835867
}
836868

837869
TEST_LIST = {{"test_arm64_until", test_arm64_until},

0 commit comments

Comments
 (0)