Changeset 270686 in webkit


Ignore:
Timestamp:
Dec 11, 2020 10:49:31 AM (3 years ago)
Author:
mark.lam@apple.com
Message:

Add extra validation after untagging code pointers.
https://bugs.webkit.org/show_bug.cgi?id=219765
rdar://72069920

Reviewed by Robin Morisset.

  • assembler/AbstractMacroAssembler.h:

(JSC::AbstractMacroAssembler::untagReturnAddress):
(JSC::AbstractMacroAssembler::validateUntaggedPtr):

  • assembler/MacroAssemblerARM64E.h:

(JSC::MacroAssemblerARM64E::untagReturnAddress):
(JSC::MacroAssemblerARM64E::validateUntaggedPtr):

  • dfg/DFGOSRExitCompilerCommon.cpp:

(JSC::DFG::reifyInlinedCallFrames):

  • ftl/FTLThunks.cpp:

(JSC::FTL::genericGenerationThunkGenerator):

  • jit/CCallHelpers.h:

(JSC::CCallHelpers::prepareForTailCallSlow):

  • jit/CallFrameShuffler.cpp:

(JSC::CallFrameShuffler::prepareForTailCall):

  • jit/ThunkGenerators.cpp:

(JSC::emitPointerValidation):
(JSC::arityFixupGenerator):

  • llint/LLIntThunks.cpp:

(JSC::LLInt::createTailCallGate):
(JSC::LLInt::untagGateThunk):

  • wasm/js/WebAssemblyFunction.cpp:

(JSC::WebAssemblyFunction::jsCallEntrypointSlow):

Location:
trunk/Source/JavaScriptCore
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r270665 r270686  
     12020-12-11  Mark Lam  <mark.lam@apple.com>
     2
     3        Add extra validation after untagging code pointers.
     4        https://bugs.webkit.org/show_bug.cgi?id=219765
     5        rdar://72069920
     6
     7        Reviewed by Robin Morisset.
     8
     9        * assembler/AbstractMacroAssembler.h:
     10        (JSC::AbstractMacroAssembler::untagReturnAddress):
     11        (JSC::AbstractMacroAssembler::validateUntaggedPtr):
     12        * assembler/MacroAssemblerARM64E.h:
     13        (JSC::MacroAssemblerARM64E::untagReturnAddress):
     14        (JSC::MacroAssemblerARM64E::validateUntaggedPtr):
     15        * dfg/DFGOSRExitCompilerCommon.cpp:
     16        (JSC::DFG::reifyInlinedCallFrames):
     17        * ftl/FTLThunks.cpp:
     18        (JSC::FTL::genericGenerationThunkGenerator):
     19        * jit/CCallHelpers.h:
     20        (JSC::CCallHelpers::prepareForTailCallSlow):
     21        * jit/CallFrameShuffler.cpp:
     22        (JSC::CallFrameShuffler::prepareForTailCall):
     23        * jit/ThunkGenerators.cpp:
     24        (JSC::emitPointerValidation):
     25        (JSC::arityFixupGenerator):
     26        * llint/LLIntThunks.cpp:
     27        (JSC::LLInt::createTailCallGate):
     28        (JSC::LLInt::untagGateThunk):
     29        * wasm/js/WebAssemblyFunction.cpp:
     30        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
     31
    1322020-12-10  Tadeu Zagallo  <tzagallo@apple.com>
    233
  • trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h

    r270377 r270686  
    11/*
    2  * Copyright (C) 2008-2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    995995
    996996    ALWAYS_INLINE void tagReturnAddress() { }
    997     ALWAYS_INLINE void untagReturnAddress() { }
     997    ALWAYS_INLINE void untagReturnAddress(RegisterID = RegisterID::InvalidGPRReg) { }
    998998
    999999    ALWAYS_INLINE void tagPtr(PtrTag, RegisterID) { }
     
    10021002    ALWAYS_INLINE void untagPtr(RegisterID, RegisterID) { }
    10031003    ALWAYS_INLINE void removePtrTag(RegisterID) { }
     1004    ALWAYS_INLINE void validateUntaggedPtr(RegisterID, RegisterID = RegisterID::InvalidGPRReg) { }
    10041005
    10051006protected:
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h

    r270214 r270686  
    11/*
    2  * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2018-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    5151    }
    5252
    53     ALWAYS_INLINE void untagReturnAddress()
     53    ALWAYS_INLINE void untagReturnAddress(RegisterID scratch = InvalidGPR)
    5454    {
    5555        untagPtr(ARM64Registers::sp, ARM64Registers::lr);
     56        validateUntaggedPtr(ARM64Registers::lr, scratch);
    5657    }
    5758
     
    7778        move(TrustedImm64(tag), tagGPR);
    7879        m_assembler.autib(target, tagGPR);
     80    }
     81
     82    ALWAYS_INLINE void validateUntaggedPtr(RegisterID target, RegisterID scratch = InvalidGPR)
     83    {
     84        if (scratch == InvalidGPR)
     85            scratch = getCachedDataTempRegisterIDAndInvalidate();
     86        load8(Address(target), scratch);
    7987    }
    8088
  • trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp

    r269349 r270686  
    285285            jit.untagPtr(GPRInfo::regT2, GPRInfo::regT3);
    286286            jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2);
     287            jit.validateUntaggedPtr(GPRInfo::regT3, GPRInfo::nonArgGPR0);
    287288            jit.tagPtr(GPRInfo::regT2, GPRInfo::regT3);
    288289#endif
  • trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp

    r261755 r270686  
    11/*
    2  * Copyright (C) 2013-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    118118#if CPU(ARM64E)
    119119    jit.untagPtr(resultTag, AssemblyHelpers::linkRegister);
     120    jit.validateUntaggedPtr(AssemblyHelpers::linkRegister);
    120121    jit.tagReturnAddress();
    121122#else
  • trunk/Source/JavaScriptCore/jit/CCallHelpers.h

    r261797 r270686  
    11/*
    2  * Copyright (C) 2011-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    783783        addPtr(TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister, tempGPR);
    784784        untagPtr(tempGPR, linkRegister);
     785        validateUntaggedPtr(linkRegister, tempGPR);
    785786#endif
    786787#elif CPU(MIPS)
  • trunk/Source/JavaScriptCore/jit/CallFrameShuffler.cpp

    r254735 r270686  
    11/*
    2  * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2015-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    447447    m_jit.untagPtr(MacroAssembler::framePointerRegister, MacroAssembler::linkRegister);
    448448    m_jit.subPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister);
     449    m_jit.validateUntaggedPtr(MacroAssembler::linkRegister);
    449450#endif
    450451
  • trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp

    r269349 r270686  
    5151        jit.pushToSave(pointerGPR);
    5252        jit.untagPtr(tag, pointerGPR);
    53         jit.load8(pointerGPR, pointerGPR);
     53        jit.validateUntaggedPtr(pointerGPR, pointerGPR);
    5454        jit.popToRestore(pointerGPR);
    5555    }
     
    397397    jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
    398398    jit.untagPtr(extraTemp, GPRInfo::regT3);
     399    jit.validateUntaggedPtr(GPRInfo::regT3, extraTemp);
    399400    PtrTag tempReturnPCTag = static_cast<PtrTag>(random());
    400401    jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
     
    453454    jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
    454455    jit.untagPtr(extraTemp, GPRInfo::regT3);
     456    jit.validateUntaggedPtr(GPRInfo::regT3, extraTemp);
    455457    jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
    456458    jit.tagPtr(extraTemp, GPRInfo::regT3);
  • trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp

    r269349 r270686  
    11/*
    2  * Copyright (C) 2012-2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2012-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    374374
    375375    jit.untagPtr(GPRInfo::argumentGPR2, ARM64Registers::lr);
     376    jit.validateUntaggedPtr(ARM64Registers::lr, GPRInfo::argumentGPR2);
    376377    jit.farJump(GPRInfo::regT0, tag);
    377378
     
    478479    jit.addPtr(CCallHelpers::TrustedImm32(16), GPRInfo::callFrameRegister, GPRInfo::regT3);
    479480    jit.untagPtr(GPRInfo::regT3, ARM64Registers::lr);
     481    jit.validateUntaggedPtr(ARM64Registers::lr, GPRInfo::regT3);
    480482    jit.move(CCallHelpers::TrustedImmPtr(pointer), GPRInfo::regT3);
    481483    jit.farJump(GPRInfo::regT3, OperationPtrTag);
  • trunk/Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp

    r269974 r270686  
    11/*
    2  * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    417417    jit.emitFunctionEpilogue();
    418418#if CPU(ARM64E)
    419     jit.untagReturnAddress();
     419    jit.untagReturnAddress(scratchGPR);
    420420#endif
    421421    auto jumpToHostCallThunk = jit.jump();
Note: See TracChangeset for help on using the changeset viewer.