Skip to content

Commit 209f87d

Browse files
committed
Typecast arguments to PAuth uc_ctl_* macros
Fixes issue where literal arguments would be written to variable argument memory as an int, but subsequently read from va_list as a uint64_t, which on some platforms might be a different size and lead to corruption of later arguments, breaking PAuth helper functionality or causing segmentation faults.
1 parent f13dd04 commit 209f87d

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

include/unicorn/unicorn.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -729,11 +729,11 @@ See sample_ctl.c for a detailed example.
729729
#define uc_ctl_context_mode(uc, mode) \
730730
uc_ctl(uc, UC_CTL_WRITE(UC_CTL_CONTEXT_MODE, 1), (mode))
731731
#define uc_ctl_pauth_sign(uc, ptr, key, diversifier, signed_ptr) \
732-
uc_ctl(uc, UC_CTL_READ_WRITE(UC_CTL_PAUTH_SIGN, 4), (ptr), (key), (diversifier), (signed_ptr))
732+
uc_ctl(uc, UC_CTL_READ_WRITE(UC_CTL_PAUTH_SIGN, 4), (uint64_t)(ptr), (int)(key), (uint64_t)(diversifier), (uint64_t *)(signed_ptr))
733733
#define uc_ctl_pauth_strip(uc, ptr, key, stripped_ptr) \
734-
uc_ctl(uc, UC_CTL_READ_WRITE(UC_CTL_PAUTH_STRIP, 3), (ptr), (key), (stripped_ptr))
734+
uc_ctl(uc, UC_CTL_READ_WRITE(UC_CTL_PAUTH_STRIP, 3), (uint64_t)(ptr), (int)(key), (uint64_t *)(stripped_ptr))
735735
#define uc_ctl_pauth_auth(uc, ptr, key, diversifier, valid) \
736-
uc_ctl(uc, UC_CTL_READ_WRITE(UC_CTL_PAUTH_AUTH, 4), (ptr), (key), (diversifier), (valid))
736+
uc_ctl(uc, UC_CTL_READ_WRITE(UC_CTL_PAUTH_AUTH, 4), (uint64_t)(ptr), (int)(key), (uint64_t)(diversifier), (uint64_t *)(valid))
737737

738738
// Opaque storage for CPU context, used with uc_context_*()
739739
struct uc_context;

0 commit comments

Comments
 (0)