[PATCH] x86: Add __sigsetjmp_cancel and __setjmp_cancel

H.J. Lu hjl.tools@gmail.com
Thu Mar 22 20:59:00 GMT 2018


On Fri, Mar 16, 2018 at 4:28 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Fri, Mar 16, 2018 at 1:24 AM, Florian Weimer <fw@deneb.enyo.de> wrote:
>> * H. J. Lu:
>>
>>> +/* Function used in the macros.  */
>>> +struct __jmp_buf_tag;
>>> +extern int __sigsetjmp_cancel (struct __jmp_buf_tag *__env, int __savemask)
>>> +  __THROWNL __attribute_returns_twice__;
>>
>> How is __THROWNL correct here?  We do unwind through this function.
>> The __EXCEPTIONS guard is not effective because of LTO, and some
>> applications undefine __EXCEPTIONS to avoid the table-based
>> cancellation handlers.
>
> This is moved from <pthread.h>:
>
> /* Function used in the macros.  */
> struct __jmp_buf_tag;
> extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL;
>
> Is <pthread.h> wrong?

It turns out that since libpthread provides compatible versions of
longjmp and siglongjmp
which don't save and restore shadow stack,  new versions of longjmp
and siglongjmp,
which save and restore shadow stack, should be added to libc.
Otherwise, porgrams
linked with libpthread will pick the wrong longjmp.

Here is the updated patch.  OK for master?

Thanks.

-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-x86-Add-__sigsetjmp_cancel-and-__setjmp_cancel.patch
Type: text/x-patch
Size: 28336 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20180322/0da762ca/attachment.bin>


More information about the Libc-alpha mailing list