1*d4514f0bSApple OSS Distributions /* 2*d4514f0bSApple OSS Distributions * Copyright (c) 2019 Apple Computer, Inc. All rights reserved. 3*d4514f0bSApple OSS Distributions * 4*d4514f0bSApple OSS Distributions * @APPLE_LICENSE_HEADER_START@ 5*d4514f0bSApple OSS Distributions * 6*d4514f0bSApple OSS Distributions * The contents of this file constitute Original Code as defined in and 7*d4514f0bSApple OSS Distributions * are subject to the Apple Public Source License Version 1.1 (the 8*d4514f0bSApple OSS Distributions * "License"). You may not use this file except in compliance with the 9*d4514f0bSApple OSS Distributions * License. Please obtain a copy of the License at 10*d4514f0bSApple OSS Distributions * http://www.apple.com/publicsource and read it before using this file. 11*d4514f0bSApple OSS Distributions * 12*d4514f0bSApple OSS Distributions * This Original Code and all software distributed under the License are 13*d4514f0bSApple OSS Distributions * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14*d4514f0bSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15*d4514f0bSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16*d4514f0bSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17*d4514f0bSApple OSS Distributions * License for the specific language governing rights and limitations 18*d4514f0bSApple OSS Distributions * under the License. 19*d4514f0bSApple OSS Distributions * 20*d4514f0bSApple OSS Distributions * @APPLE_LICENSE_HEADER_END@ 21*d4514f0bSApple OSS Distributions */ 22*d4514f0bSApple OSS Distributions 23*d4514f0bSApple OSS Distributions enum ptrauth_key { 24*d4514f0bSApple OSS Distributions ptrauth_key_asia = 0, 25*d4514f0bSApple OSS Distributions ptrauth_key_asib = 1, 26*d4514f0bSApple OSS Distributions ptrauth_key_asda = 2, 27*d4514f0bSApple OSS Distributions ptrauth_key_asdb = 3, 28*d4514f0bSApple OSS Distributions 29*d4514f0bSApple OSS Distributions /* A process-independent key which can be used to sign code pointers. 30*d4514f0bSApple OSS Distributions Signing and authenticating with this key is a no-op in processes 31*d4514f0bSApple OSS Distributions which disable ABI pointer authentication. */ 32*d4514f0bSApple OSS Distributions ptrauth_key_process_independent_code = ptrauth_key_asia, 33*d4514f0bSApple OSS Distributions 34*d4514f0bSApple OSS Distributions /* A process-specific key which can be used to sign code pointers. 35*d4514f0bSApple OSS Distributions Signing and authenticating with this key is enforced even in processes 36*d4514f0bSApple OSS Distributions which disable ABI pointer authentication. */ 37*d4514f0bSApple OSS Distributions ptrauth_key_process_dependent_code = ptrauth_key_asib, 38*d4514f0bSApple OSS Distributions 39*d4514f0bSApple OSS Distributions /* A process-independent key which can be used to sign data pointers. 40*d4514f0bSApple OSS Distributions Signing and authenticating with this key is a no-op in processes 41*d4514f0bSApple OSS Distributions which disable ABI pointer authentication. */ 42*d4514f0bSApple OSS Distributions ptrauth_key_process_independent_data = ptrauth_key_asda, 43*d4514f0bSApple OSS Distributions 44*d4514f0bSApple OSS Distributions /* A process-specific key which can be used to sign data pointers. 45*d4514f0bSApple OSS Distributions Signing and authenticating with this key is a no-op in processes 46*d4514f0bSApple OSS Distributions which disable ABI pointer authentication. */ 47*d4514f0bSApple OSS Distributions ptrauth_key_process_dependent_data = ptrauth_key_asdb, 48*d4514f0bSApple OSS Distributions 49*d4514f0bSApple OSS Distributions /* The key used to sign C function pointers. 50*d4514f0bSApple OSS Distributions The extra data is always 0. */ 51*d4514f0bSApple OSS Distributions ptrauth_key_function_pointer = ptrauth_key_process_independent_code, 52*d4514f0bSApple OSS Distributions 53*d4514f0bSApple OSS Distributions /* The key used to sign return addresses on the stack. 54*d4514f0bSApple OSS Distributions The extra data is based on the storage address of the return address. 55*d4514f0bSApple OSS Distributions On ARM64, that is always the storage address of the return address plus 8 56*d4514f0bSApple OSS Distributions (or, in other words, the value of the stack pointer on function entry) */ 57*d4514f0bSApple OSS Distributions ptrauth_key_return_address = ptrauth_key_process_dependent_code, 58*d4514f0bSApple OSS Distributions 59*d4514f0bSApple OSS Distributions /* The key used to sign frame pointers on the stack. 60*d4514f0bSApple OSS Distributions The extra data is based on the storage address of the frame pointer. 61*d4514f0bSApple OSS Distributions On ARM64, that is always the storage address of the frame pointer plus 16 62*d4514f0bSApple OSS Distributions (or, in other words, the value of the stack pointer on function entry) */ 63*d4514f0bSApple OSS Distributions ptrauth_key_frame_pointer = ptrauth_key_process_dependent_data, 64*d4514f0bSApple OSS Distributions 65*d4514f0bSApple OSS Distributions /* The key used to sign block function pointers, including: 66*d4514f0bSApple OSS Distributions invocation functions, 67*d4514f0bSApple OSS Distributions block object copy functions, 68*d4514f0bSApple OSS Distributions block object destroy functions, 69*d4514f0bSApple OSS Distributions __block variable copy functions, and 70*d4514f0bSApple OSS Distributions __block variable destroy functions. 71*d4514f0bSApple OSS Distributions The extra data is always the address at which the function pointer 72*d4514f0bSApple OSS Distributions is stored. 73*d4514f0bSApple OSS Distributions 74*d4514f0bSApple OSS Distributions Note that block object pointers themselves (i.e. the direct 75*d4514f0bSApple OSS Distributions representations of values of block-pointer type) are not signed. */ 76*d4514f0bSApple OSS Distributions ptrauth_key_block_function = ptrauth_key_asia, 77*d4514f0bSApple OSS Distributions 78*d4514f0bSApple OSS Distributions /* The key used to sign C++ v-table pointers. 79*d4514f0bSApple OSS Distributions The extra data is always 0. */ 80*d4514f0bSApple OSS Distributions ptrauth_key_cxx_vtable_pointer = ptrauth_key_asda 81*d4514f0bSApple OSS Distributions 82*d4514f0bSApple OSS Distributions }; 83*d4514f0bSApple OSS Distributions 84