Skip to content

Commit e2f8b9d

Browse files
committed
Fix auth of personality pointer
1 parent 0e8f327 commit e2f8b9d

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

libunwind/src/DwarfParser.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,10 +405,17 @@ const char *CFI_Parser<A>::parseCIE(A &addressSpace, pint_t cie,
405405
// schema. If we could guarantee the encoding of the personality we
406406
// could avoid this by simply giving resultAddr the correct ptrauth
407407
// schema and performing an assignment.
408+
#ifdef __APPLE__
409+
const auto oldDiscriminator = resultAddr;
410+
#else
411+
const auto oldDiscriminator = ptrauth_blend_discriminator(
412+
(void*)resultAddr,
413+
ptrauth_string_discriminator("personality"));
414+
#endif
408415
const auto discriminator = ptrauth_blend_discriminator(
409416
&cieInfo->personality, __ptrauth_unwind_cie_info_personality_disc);
410417
void *signedPtr = ptrauth_auth_and_resign(
411-
(void *)personality, ptrauth_key_function_pointer, resultAddr,
418+
(void *)personality, ptrauth_key_function_pointer, oldDiscriminator,
412419
ptrauth_key_function_pointer, discriminator);
413420
personality = (pint_t)signedPtr;
414421
}

0 commit comments

Comments
 (0)