Re: prctl call wrongly succeeds on HPPA?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



John David Anglin <dave.anglin@xxxxxxxx> writes:

> On 2023-11-17 9:55 a.m., Helge Deller wrote:
>> On 11/11/23 00:02, John David Anglin wrote:
>>> On 2023-11-10 5:16 p.m., Sam James wrote:
>>>> John David Anglin <dave.anglin@xxxxxxxx> writes:
>>>>
>>>>> On 2023-11-10 4:32 p.m., Sam James wrote:
>>>>>> John David Anglin <dave.anglin@xxxxxxxx> writes:
>>>>>>
>>>>>>> On 2023-11-10 3:38 p.m., Helge Deller wrote:
>>>>>>>> On 11/10/23 21:12, John David Anglin wrote:
>>>>>>>>> On 2023-11-10 3:01 p.m., Helge Deller wrote:
>>>>>>>>>>>> On HPPA, we still need executable stacks, so this option doesn't work
>>>>>>>>>>>> and leads to a segfault on boot.
>>>>>>>>>> For kernel we don't need it any longer.
>>>>>>>>>> But there might be dependencies on glibc version and/or combination.
>>>>>>>>>> So, I've currently lost overview if we still need executable stacks...
>>>>>>>>> FWIW, I recently changed gcc-14 to enable GNU stack notes and fixed a bug in the
>>>>>>>>> 32-bit PA 2.0 trampoline template.  All execute stack tests in glibc now pass with gcc-14.
>>>>>>>> Yes, I saw your commits.
>>>>>>>> So, any code compiled with >= gcc-14 should be fine with non-writeable stacks?
>>>>>>> Not exactly.  An executable stack is still needed for nested functions.  They are still called
>>>>>>> via a stack trampoline.  The GNU stack note indicates whether an object needs an executable
>>>>>>> stack or not.  These notes are collected by linker.  The glibc loader determines whether to setup
>>>>>>> an executable stack or not.
>>>>>>>> It would be easier if it would be a glibc dependency (for distribution maintainers)...
>>>>>>> I'm not aware of any glibc dependency...
>>>>>>>
>>>>>>> I think once gcc-14 becomes the default compiler, we will have to enable GNU stack notes in
>>>>>>> previous gcc versions.  We will still have executable stacks until everything is rebuilt.
>>>>>> We will need to update that default in Binutils too, I think. That
>>>>>> configure arg is working OK for me, but I did not try systemd yet.
>>>>> Currently, there are no architecture dependencies in the ld --enable-warn-execstack and --enable-default-execstack
>>>>> configure options.  The -z execstack and -z noexecstack ld options can override the GNU notes, or lack thereof.  We
>>>>> may have to fix some assembly code.  Maybe binutils should be built with --enable-warn-execstack once we switch
>>>>> to gcc-14.  I don't think we want --enable-default-execstack after switching to gcc-14.
>>>> Are you sure? I just did some more digging now...
>>>> * It looks like targets can set elf_backend_default_execstack in
>>>> bfd/elf-*.c to override the default, see e.g. 81cd0a49c9e5f28c0fec391e449ea3272077c432 for cris.
>>>> * See acd65fa610df09a0954b8fecdadf546215263c5d where HPPA's default got changed.
>>>> * ld/configure.tgt still has some suppression for HPPA's default for
>>>> warnings.
>>>>
>>>> I think we may need to, in due course, set elf_backend_default_execstack
>>>> in bfd/elf32-hppa.c, and then drop those bits in ld/configure.tgt too?
>>> You are right about both.  We have in ld/configure.tgt:
>>> if test "${ac_default_ld_warn_execstack}" = 2; then
>>>    case "${targ}" in
>>>        # The HPPA port needs to support older kernels that
>>>        # use executable stacks for signals and syscalls.
>>>        # Many MIPS targets use executable stacks.
>>>      hppa*-*-* | \
>>>      mips*-*-*)
>>>        ac_default_ld_warn_execstack=0
>>>        ;;
>>>      *)
>>>        ;;
>>>    esac
>>> fi
>>>
>>> We also may need:
>>> #define elf_backend_default_execstack 0
>>> in elf32-hppa.c at some point.
>>>
>>> I think when GNU stack notes are present, they determine whether the stack in an executable will be executable or not.
>>> But I could be wrong 🙁
>>>
>>> I'll try building binutils with gcc-14.
>>
>> Did it worked?
> Build succeeds but there are about a dozen fails in ld testsuite which need investigation.
>
> I got waylaid:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112415
>
> Jeff thinks the patch which I committed to gcc trunk to improve handling of REG+D addresses
> will fail: https://gcc.gnu.org/pipermail/gcc-patches/2023-November/637018.html
>
> There have been many problems with this over the years but I would prefer to see what breaks
> with current implementation.  It fixes python build and we no longer need to disable inlining of
> small functions.  A lot of water has passed under the bridge since Jeff worked on the issue.

OK, I'll go ahead with testing then and let you know if there's any
issue. I didn't want to start if it was going to be reverted shortly or
something.

Am keen on seeing if I notice any differences with Python build time and
runtime performance too...

>>
>> Btw, I added a small section about executable stacks in the TODO
>> section of the wiki:
>> https://parisc.wiki.kernel.org/index.php/TODO#executable_stack

Nice, thanks!

>
> Dave




[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux