Correct priority cancellation handler signing once more

Resolves rdar://150378890 for real this time, verified on arm64e myself
This commit is contained in:
Konrad 'ktoso' Malawski
2025-06-02 21:30:17 +09:00
parent d49dd182ed
commit 2c99a669d3
3 changed files with 7 additions and 4 deletions

View File

@@ -1745,7 +1745,7 @@ namespace SpecialPointerAuthDiscriminators {
const uint16_t AsyncContextParent = 0xbda2; // = 48546 const uint16_t AsyncContextParent = 0xbda2; // = 48546
const uint16_t AsyncContextResume = 0xd707; // = 55047 const uint16_t AsyncContextResume = 0xd707; // = 55047
const uint16_t AsyncContextYield = 0xe207; // = 57863 const uint16_t AsyncContextYield = 0xe207; // = 57863
const uint16_t CancellationNotificationFunction = 0xf73; // = 3955 (TaskPriority, TaskPriority) -> Void const uint16_t CancellationNotificationFunction = 0x0f08; // = 3848
const uint16_t EscalationNotificationFunction = 0x7861; // = 30817 const uint16_t EscalationNotificationFunction = 0x7861; // = 30817
const uint16_t AsyncThinNullaryFunction = 0x0f08; // = 3848 const uint16_t AsyncThinNullaryFunction = 0x0f08; // = 3848
const uint16_t AsyncFutureFunction = 0x720f; // = 29199 const uint16_t AsyncFutureFunction = 0x720f; // = 29199

View File

@@ -269,7 +269,7 @@ public:
/// subsequently used. /// subsequently used.
class EscalationNotificationStatusRecord : public TaskStatusRecord { class EscalationNotificationStatusRecord : public TaskStatusRecord {
public: public:
using FunctionType = SWIFT_CC(swift) void(JobPriority, JobPriority, SWIFT_CONTEXT void *); using FunctionType = SWIFT_CC(swift) void(uint8_t, uint8_t, SWIFT_CONTEXT void *);
private: private:
FunctionType *__ptrauth_swift_escalation_notification_function Function; FunctionType *__ptrauth_swift_escalation_notification_function Function;
@@ -282,7 +282,10 @@ public:
} }
void run(JobPriority oldPriority, JobPriority newPriority) { void run(JobPriority oldPriority, JobPriority newPriority) {
Function(oldPriority, newPriority, Argument); Function(
static_cast<size_t>(oldPriority),
static_cast<size_t>(newPriority),
Argument);
} }
static bool classof(const TaskStatusRecord *record) { static bool classof(const TaskStatusRecord *record) {

View File

@@ -1817,7 +1817,7 @@ swift_task_addPriorityEscalationHandlerImpl(
void *context) { void *context) {
void *allocation = void *allocation =
swift_task_alloc(sizeof(EscalationNotificationStatusRecord)); swift_task_alloc(sizeof(EscalationNotificationStatusRecord));
auto unsigned_handler = swift_auth_code(handler, 3955); auto unsigned_handler = swift_auth_code(handler, 30817);
auto *record = ::new (allocation) auto *record = ::new (allocation)
EscalationNotificationStatusRecord(unsigned_handler, context); EscalationNotificationStatusRecord(unsigned_handler, context);