Changeset 287908 in webkit


Ignore:
Timestamp:
Jan 11, 2022 8:03:20 PM (2 years ago)
Author:
mark.lam@apple.com
Message:

Update hashThreadState() to exclude opaque_flags.
https://bugs.webkit.org/show_bug.cgi?id=235081
rdar://86282584

Reviewed by Keith Miller.

Source/JavaScriptCore:

Removed some unused code.

  • runtime/MachineContext.h:

(JSC::MachineContext::stackPointer):
(JSC::MachineContext::framePointer):
(JSC::MachineContext::instructionPointer):
(JSC::MachineContext::linkRegister):
(JSC::MachineContext::setStackPointer): Deleted.
(JSC::MachineContext::setFramePointer): Deleted.
(JSC::MachineContext::setLinkRegister): Deleted.

Source/WTF:

The opaque_flags may be used by the OS, and may be altered without our knowledge.
Hence, our hash should not include the
opaque_flags field.

Also remove some unused code.

  • wtf/PlatformRegisters.h:
  • wtf/threads/Signals.cpp:

(WTF::hashThreadState):

Location:
trunk/Source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r287903 r287908  
     12022-01-11  Mark Lam  <mark.lam@apple.com>
     2
     3        Update hashThreadState() to exclude __opaque_flags.
     4        https://bugs.webkit.org/show_bug.cgi?id=235081
     5        rdar://86282584
     6
     7        Reviewed by Keith Miller.
     8
     9        Removed some unused code.
     10
     11        * runtime/MachineContext.h:
     12        (JSC::MachineContext::stackPointer):
     13        (JSC::MachineContext::framePointer):
     14        (JSC::MachineContext::instructionPointer):
     15        (JSC::MachineContext::linkRegister):
     16        (JSC::MachineContext::setStackPointer): Deleted.
     17        (JSC::MachineContext::setFramePointer): Deleted.
     18        (JSC::MachineContext::setLinkRegister): Deleted.
     19
    1202022-01-11  Asumu Takikawa  <asumu@igalia.com>
    221
  • trunk/Source/JavaScriptCore/runtime/MachineContext.h

    r287464 r287908  
    11/*
    22 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>.
    3  * Copyright (C) 2018 Apple Inc. All rights reserved.
     3 * Copyright (C) 2018-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    4040
    4141#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    42 template<typename T = void*> void setStackPointer(PlatformRegisters&, T);
    4342template<typename T = void*> T framePointer(const PlatformRegisters&);
    44 template<typename T = void*> void setFramePointer(PlatformRegisters&, T);
    4543inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters&);
    46 inline void setLinkRegister(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>);
    4744inline std::optional<MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>> instructionPointer(const PlatformRegisters&);
    4845inline void setInstructionPointer(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>);
     
    6865
    6966template<typename T = void*> T stackPointer(const mcontext_t&);
    70 template<typename T = void*> void setStackPointer(mcontext_t&, T);
    7167template<typename T = void*> T framePointer(const mcontext_t&);
    72 template<typename T = void*> void setFramePointer(mcontext_t&, T);
    7368inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t&);
    74 inline void setInstructionPointer(mcontext_t&, MacroAssemblerCodePtr<CFunctionPtrTag>);
    7569
    7670template<size_t N> void*& argumentPointer(mcontext_t&);
     
    151145}
    152146
    153 template<typename T>
    154 inline void setStackPointer(PlatformRegisters& regs, T value)
    155 {
    156 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    157     assertIsNotTagged(bitwise_cast<void*>(value));
    158     WTF_WRITE_PLATFORM_REGISTERS_SP_WITH_PROFILE(regs, bitwise_cast<void*>(value));
    159 #elif USE(DARWIN_REGISTER_MACROS)
    160     __darwin_arm_thread_state64_set_sp(regs, value);
    161 #else
    162     stackPointerImpl(regs) = bitwise_cast<void*>(value);
    163 #endif
    164 }
    165 
    166147#else // not OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    167148
     
    230211#endif
    231212}
    232 
    233 template<typename T>
    234 inline void setStackPointer(mcontext_t& machineContext, T value)
    235 {
    236 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    237     assertIsNotTagged(bitwise_cast<void*>(value));
    238     WTF_WRITE_MACHINE_CONTEXT_SP_WITH_PROFILE(machineContext, bitwise_cast<void*>(value));
    239 #elif USE(DARWIN_REGISTER_MACROS)
    240     return setStackPointer(machineContext->__ss, value);
    241 #else
    242     stackPointerImpl(machineContext) = bitwise_cast<void*>(value);
    243 #endif
    244 }
    245213#endif // HAVE(MACHINE_CONTEXT)
    246214
     
    312280#endif
    313281}
    314 
    315 template<typename T>
    316 inline void setFramePointer(PlatformRegisters& regs, T value)
    317 {
    318 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    319     assertIsNotTagged(bitwise_cast<void*>(value));
    320     WTF_WRITE_PLATFORM_REGISTERS_FP_WITH_PROFILE(regs, bitwise_cast<void*>(value));
    321 #else
    322     framePointerImpl(regs) = bitwise_cast<void*>(value);
    323 #endif
    324 }
    325282#endif // OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    326283
     
    383340#else
    384341    return bitwise_cast<T>(framePointerImpl(const_cast<mcontext_t&>(machineContext)));
    385 #endif
    386 }
    387 
    388 template<typename T>
    389 inline void setFramePointer(mcontext_t& machineContext, T value)
    390 {
    391 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    392     assertIsNotTagged(bitwise_cast<void*>(value));
    393     WTF_WRITE_MACHINE_CONTEXT_FP_WITH_PROFILE(machineContext, bitwise_cast<void*>(value));
    394 #else
    395     framePointerImpl(machineContext) = bitwise_cast<void*>(value);
    396342#endif
    397343}
     
    542488#endif
    543489}
    544 
    545 inline void setInstructionPointer(mcontext_t& machineContext, MacroAssemblerCodePtr<CFunctionPtrTag> value)
    546 {
    547 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    548     WTF_WRITE_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext, value.executableAddress());
    549 #elif USE(DARWIN_REGISTER_MACROS)
    550     setInstructionPointer(machineContext->__ss, value);
    551 #else
    552     instructionPointerImpl(machineContext) = value.executableAddress();
    553 #endif
    554 }
    555490#endif // HAVE(MACHINE_CONTEXT)
    556491
     
    568503#endif
    569504    return MacroAssemblerCodePtr<PlatformRegistersLRPtrTag>(value);
    570 }
    571 
    572 inline void setLinkRegister(PlatformRegisters& regs, MacroAssemblerCodePtr<CFunctionPtrTag> value)
    573 {
    574 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    575     WTF_WRITE_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs, value.executableAddress());
    576 #else
    577     __darwin_arm_thread_state64_set_lr_fptr(regs, value.executableAddress());
    578 #endif
    579505}
    580506#endif // OS(DARWIN) && __DARWIN_UNIX03 && CPU(ARM64)
  • trunk/Source/WTF/ChangeLog

    r287879 r287908  
     12022-01-11  Mark Lam  <mark.lam@apple.com>
     2
     3        Update hashThreadState() to exclude __opaque_flags.
     4        https://bugs.webkit.org/show_bug.cgi?id=235081
     5        rdar://86282584
     6
     7        Reviewed by Keith Miller.
     8
     9        The __opaque_flags may be used by the OS, and may be altered without our knowledge.
     10        Hence, our hash should not include the __opaque_flags field.
     11
     12        Also remove some unused code.
     13
     14        * wtf/PlatformRegisters.h:
     15        * wtf/threads/Signals.cpp:
     16        (WTF::hashThreadState):
     17
    1182022-01-11  Sam Weinig  <weinig@apple.com>
    219
  • trunk/Source/WTF/wtf/PlatformRegisters.h

    r285019 r287908  
    11/*
    22 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>
    3  * Copyright (C) 2019 Apple Inc. All rights reserved.
     3 * Copyright (C) 2019-2022 Apple Inc. All rights reserved.
    44 *
    55 * Redistribution and use in source and binary forms, with or without
     
    120120    reinterpret_cast<void*>(arm_thread_state64_get_sp(const_cast<PlatformRegisters&>(regs)))
    121121
    122 #define WTF_WRITE_PLATFORM_REGISTERS_SP_WITH_PROFILE(regs, newPointer) \
    123     arm_thread_state64_set_sp(regs, reinterpret_cast<uintptr_t>(newPointer))
    124 
    125122#define WTF_READ_PLATFORM_REGISTERS_FP_WITH_PROFILE(regs) \
    126123    reinterpret_cast<void*>(arm_thread_state64_get_fp(const_cast<PlatformRegisters&>(regs)))
    127124
    128 #define WTF_WRITE_PLATFORM_REGISTERS_FP_WITH_PROFILE(regs, newPointer) \
    129     arm_thread_state64_set_fp(regs, reinterpret_cast<uintptr_t>(newPointer))
    130 
    131125#define WTF_READ_PLATFORM_REGISTERS_LR_WITH_PROFILE(regs) \
    132126    threadStateLRInternal(const_cast<PlatformRegisters&>(regs))
    133 
    134 #define WTF_WRITE_PLATFORM_REGISTERS_LR_WITH_PROFILE(regs, newPointer) \
    135     arm_thread_state64_set_lr_fptr(regs, newPointer)
    136127
    137128#define WTF_READ_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs) \
     
    144135    WTF_READ_PLATFORM_REGISTERS_SP_WITH_PROFILE(machineContext->__ss)
    145136
    146 #define WTF_WRITE_MACHINE_CONTEXT_SP_WITH_PROFILE(machineContext, newPointer) \
    147     WTF_WRITE_PLATFORM_REGISTERS_SP_WITH_PROFILE(machineContext->__ss, newPointer)
    148 
    149137#define WTF_READ_MACHINE_CONTEXT_FP_WITH_PROFILE(machineContext) \
    150138    WTF_READ_PLATFORM_REGISTERS_FP_WITH_PROFILE(machineContext->__ss)
    151 
    152 #define WTF_WRITE_MACHINE_CONTEXT_FP_WITH_PROFILE(machineContext, newPointer) \
    153     WTF_WRITE_PLATFORM_REGISTERS_FP_WITH_PROFILE(machineContext->__ss, newPointer)
    154 
    155 #define WTF_WRITE_MACHINE_CONTEXT_LR_WITH_PROFILE(machineContext, newPointer) \
    156     WTF_WRITE_PLATFORM_REGISTERS_LR_WITH_PROFILE(machineContext->__ss, newPointer)
    157139
    158140#define WTF_READ_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext) \
    159141    WTF_READ_PLATFORM_REGISTERS_PC_WITH_PROFILE(machineContext->__ss)
    160142
    161 #define WTF_WRITE_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext, newPointer) \
    162     WTF_WRITE_PLATFORM_REGISTERS_PC_WITH_PROFILE(machineContext->__ss, newPointer)
    163 
    164143#endif // USE(PLATFORM_REGISTERS_WITH_PROFILE)
    165144
  • trunk/Source/WTF/wtf/threads/Signals.cpp

    r284533 r287908  
    11/*
    2  * Copyright (C) 2017-2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    173173    const uintptr_t* srcPtr = reinterpret_cast<const uintptr_t*>(source);
    174174
    175     for (size_t i = 0; i < threadStateSizeInPointers; ++i) {
     175    // Exclude the __opaque_flags field which is reserved for OS use.
     176    // __opaque_flags is at the end of the payload.
     177    for (size_t i = 0; i < threadStateSizeInPointers - 1; ++i) {
    176178        if (i != threadStatePCPointerIndex)
    177179            hash = ptrauth_sign_generic_data(srcPtr[i], hash);
    178180    }
     181    const uint32_t* cpsrPtr = reinterpret_cast<const uint32_t*>(&srcPtr[threadStateSizeInPointers - 1]);
     182    hash = ptrauth_sign_generic_data(static_cast<uint64_t>(*cpsrPtr), hash);
    179183   
    180184    return hash;
Note: See TracChangeset for help on using the changeset viewer.