[PATCH 1/2] Linux/x86: Update cancel_jmp_buf to match __jmp_buf_tag [BZ #22563]
Florian Weimer
fweimer@redhat.com
Thu Dec 7 19:25:00 GMT 2017
On 12/07/2017 08:19 PM, H.J. Lu wrote:
> On Thu, Dec 7, 2017 at 11:14 AM, Florian Weimer <fweimer@redhat.com> wrote:
>> On 12/07/2017 08:12 PM, H.J. Lu wrote:
>>>>
>>>> Sorry, what exactly is stored on the shadow stack? I assumed it was for
>>>> verification of the targets of ret instructions.
>>>>
>>>> In this case, don't need to unwind the shadow stack (or preserve its
>>>> contents) because there are no returns from existing stack frames once
>>>> cancellation has started.
>>>>
>>> Shadow stack is the similar to normal call stack without local variables.
>>> SHSTK checks the return address of EACH "RET" instruction against
>>> shadow stack.
>>
>>
>> Then the shadow stack contents at the time of cancellation does not matter
>> because all future RET instructions on this thread will match CALLs which
>> happened *after* cancellation. (In other words, I still think I'm right
>> about this.)
>>
>
> We are updating setjmp/lonjmp to save and restore shadow stack pointer:
>
> https://sourceware.org/git/?p=glibc.git;a=commit;h=ac195a2d554e3fb577e44474faf3ed7f4521de9f
Please try to understand what I wrote. You don't need the restore
during cancellation handling:
if (__glibc_unlikely (__not_first_call)) \
{ \
__cancel_routine (__cancel_arg); \
__pthread_unwind_next (&__cancel_buf); \
/* NOTREACHED */ \
} \
Florian
More information about the Libc-alpha
mailing list