This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 1/6/2012 3:42 PM, Ian Lance Taylor wrote:John Marino<binutils@marino.st> writes:
On 1/5/2012 7:31 PM, Ian Lance Taylor wrote:2. ver_matching_test.sh: __bss_start not local, rtld issue? real issue? (failed on v2.21 too)
Hard to understand why this would fail. The __bss_start symbol is defined automatically by the linker itself.
ok. I thought I remembered seeing references to __bss_start in rtld code, so I suspected rtld was the culprit.
Ideally rtld should not have a publically visible definition of __bss_start, but I don't see how it would cause a test failure even if it did.
4. intpri2: likely real problem. gdb log attached
This is almost certainly the same issue as the --no-ctors-in-init-array issue: DragonFly does not suppor DT_INIT_ARRAY.
If I wanted to add DT_INIT_ARRAY support to DragonFly, what component needs to be updated? again rtld?
Yes. Also you need to do some magic for statically linked executables, taking advantage of the linker-defined symbols __init_array_start and __init_array_end and friends.
5. relro_test: no relro support in rtld, ignore 6. relro_now_test: no relro support in rtld, ignore 7. relro_strip_test: no relro support in rtld, ignore
Yeah, if the dynamic linker does not handle relro, then these tests are expected to fail.
As far as I can tell, no BSD supports relro and it seems to be of limited value so I don't suspect this will change any time soon.
I'm surprised that no BSD supports relro as it is a security enhancement. I agree that the value is limited but it is not zero.
In my opinion, the biggest advantage is for the PLT. The PLT must often be writable when the program starts, so that dynamic relocations can be applied. The PLT holds code addresses, so this gives various sorts of overflow attacks a way to change which code will execute, by overwriting the PLT.
The point of relro is that after all the PLT relocations have been applied, there is no need for the PLT to change again. Making the PLT be relro implements that: the dynamic linker applies the relocations, then uses mprotect to make the PLT readonly.
This does of course require that the PLT be fully relocated at program startup time, rather than using lazy PLT relocations which is the default behaviour. You can use the linker option -z now to request that all PLT relocations be fully relocated at program startup, and when gold sees -z now it will make the PLT a relro section.
Ian
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |