Pointer Authentication and dispatch_queue_t

We got a crash in some code, I had managed to miss this topic entirely somehow. This says:

Pointer authentication can also expose latent bugs in existing code. In C++, it’s incorrect to call a virtual method using a declaration that differs from its definition. In practice, such calls typically succeed in arm64, but trigger a pointer authentication failure in arm64e. You might encounter this bug when using OS_OBJECT types like dispatch_queue_t and xpc_connection_t. You can’t pass instances of these types from C++ code to an Objective-C++ function (or vice versa) because they’re defined differently in Objective-C++ to support automatic reference counting (ARC).

and, yes, we have both C++ and ObjC++ code, and a class does have a dispatch_queue_t member, and it does get passed around (although I don't think anything other than ObjC++ code touches the member), but... the documentation there says "you can't d this" but has absolutely no information on what you are supposed to do instead.

Again, I've managed to miss this completely, and my network searching ability is pretty awful, so I assume I simply couldn't find documentation on it? (And I can't stream video very well where I am right now.)

Replies

We don’t support arm64e for third-party user space code so, unless you’ve gone out of you way to bypass that limitation, this isn’t the cause of your crash.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Hm, the crash said it was a possible PA crash. Why would that happen if it's not available for user space code?

Note that it was a network extension that crashed.

if it's not available for user space code

It’s not supported for third-party user space code. Most system frameworks are built arm64e.

The reason for this, btw, is that we haven’t quite nailed down our arm64e ABI, so we can’t promise that code built with it today will continue working in the future. That’s not a problem for the system frameworks, which are revlocked to the system.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Ok... so I'm still confused why there is a document saying "here's what you need to know about Pointer Authentication," which specifically mentions a couple of types and circumstances. Should I file a feedback request for improving that page? And the crash reports that say "this might be a pointer authentication crash"? 😄

Is something going on with arm64e in Asia? It seems like that ABI is being used unless a whole lot of individuals are disabling SIP and using the boot arg?