@@ -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+
743748static 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
934967TEST_LIST = {{"test_arm64_until" , test_arm64_until },
0 commit comments