[PATCH 2/2] jmpbuf: Add paddings for target specific usage
H.J. Lu
hjl.tools@gmail.com
Mon Nov 13 19:40:00 GMT 2017
On Mon, Nov 13, 2017 at 8:44 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Nov 13, 2017 at 8:34 AM, Florian Weimer <fweimer@redhat.com> wrote:
>> On 11/13/2017 03:05 PM, H.J. Lu wrote:
>>>
>>> On Mon, Nov 13, 2017 at 5:09 AM, Florian Weimer <fweimer@redhat.com>
>>> wrote:
>>>>
>>>> On 11/08/2017 07:27 PM, H.J. Lu wrote:
>>>>>
>>>>>
>>>>> +/* The biggest signal number + 1 */
>>>>> +#define _JUMP_BUF_SIGSET_NSIG 257
>>>>> +/* Number of longs to hold all signals. */
>>>>> +#define _JUMP_BUF_SIGSET_NWORDS \
>>>>> + ((_JUMP_BUF_SIGSET_NSIG - 1 + 7) / (8 * sizeof (unsigned long int)))
>>>>
>>>>
>>>>
>>>> Where does 257 come from? 65 or 129 I would understand considering the
>>>> kernel sources, but 257 is odd.
>>
>>
>> Oh. I'm not sure if we should put this into installed header.
>>
>> Maybe we can use a different approach? Something similar to the pthread
>> types? Or just not change the external type at all and just ad some
>> internal space reuse mechanism?
>
> I will see what I can do.
>
>> We had problems with people poking at supposedly invisible jmpbuf contents
>> in the past, and I'm worried that adding even __ members will encourage
>> that.
>>
>>>> I think it would be clearer to hard-code the array sizes and explain why
>>>> the
>>>> values where chosen in that way.
>>>>
>>>> We also need a test that setprocmask does not read from the previously
>>>
>>>
>>> Did you mean "sigprocmask"?
>>
>>
>> Right.
>>
>>>> unused part. I can move the existing next_to_fault bits to support/ if
>>>> that
>>>> would help.
>>>
>>>
>>> Yes, please.
>>
>>
>> Okay, I'll move it to support/ soon.
>>
>
Here is the updated patch to add <setjmpP.h>. I added a test:
struct support_next_to_fault jmpbuf
= support_next_to_fault_allocate (SAVED_MASK_OFFSET + (_NSIG / 8));
struct __jmp_buf_tag *sj = (struct __jmp_buf_tag *) jmpbuf.buffer;
errno = 0;
if (sigsetjmp (sj, 1) == 0)
{
siglongjmp (sj, 1);
return EXIT_FAILURE;
}
if (errno != 0)
{
printf ("sigsetjmp: %s\n", strerror (errno));
return EXIT_FAILURE;
}
to verify that __sigprocmask won't read beyond _NSIG / 8.
Does it look OK?
Thanks.
--
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-jmpbuf-Add-paddings-for-architecture-specific-usage.patch
Type: text/x-patch
Size: 17631 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20171113/13e2022f/attachment.bin>
More information about the Libc-alpha
mailing list