Apple announced today the forthcoming release of Macs based on Apple Silicon. Apple will bring support for this new target to open source in both the Clang and Swift compilers, as well as LLDB. The process will start immediately.
The first step will be to upstream support for the new Mac target to the LLVM project. The first patch is up for review.
Afterward, the corresponding changes will land in the Swift project (compiler, SwiftPM, Standard Library, etc).
Is the arch(???) test name set yet? I went through the phab patch and couldn't find anything. Will this need to go through evolution review or will there be an obvious name selected internally under the Apple umbrella?
As someone that doesn’t know really anything about different arm architectures, I notice that sometimes arm64 is listed in supported architectures for macOS, sometimes arm64e, and sometimes both. What’s the difference?
While you can’t yet distribute arm64e binaries, you can test your app with them during development in preparation for when they become part of Xcode’s standard build process.
There’s also this document in the LLVM repo (again by JMC), which goes in to more depth about what kind of things are signed (e.g. heap destructors). Very little code interacts with these directly, so for almost everybody, pointer authentication won’t require any code changes.
Apple have apparently been using this internally since iOS 12, and Google’s Project Zero have some practical examples which show how this can make attacks much more difficult.
PAC remains a solid and worthwhile mitigation. Apple's hardening of PAC in the A12 SoC, which was clearly designed to protect against kernel attackers with read/write, meant that I did not find a systematic break in the design and had to rely on signing gadgets, which are easy to patch via software ... I believe it's possible for Apple to harden their implementation to the point that strong forgery bypasses become rare.
Note that it enables a little bit more than just PAC; of particular interest to me, it also implies the ARMv8.3 ISA extensions including native Float16 arithmetic: