[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