From: Dominic Chen <d.c.ddcc@gmail.com>
To: musl@lists.openwall.com
Subject: Re: [musl] SIGSEGV with TEXTREL
Date: Fri, 25 Sep 2020 16:13:19 -0400 [thread overview]
Message-ID: <7318ee2c-17f5-99a9-12e4-622fe94cbfe2@gmail.com> (raw)
In-Reply-To: <20200925093733.GJ2947641@port70.net>
On 9/25/2020 2:58 PM, Rich Felker wrote:
> On the other hand, there's no compelling reason to support textrels in
> the main program since the main program can just be linked as non-PIE
> if you have object files (e.g. due to asm source files or static
> libraries you don't have source to) that are not PIC-compatible.
I'm actually comparing the overheads of various security mechanisms, so
I need to build with PIC and RELRO/BIND_NOW for ASLR.
On 9/25/2020 5:37 AM, Szabolcs Nagy wrote:
> there are no existing libcs that fully support textrels
> (since for that not just dynamic relocs but static relocs
> need to be supported too).
I only need TEXTREL support for dynamic relocations, so static
relocations aren't an issue.
> glibc only supports a small set of textrels and of course
> it has to mark the code executable+writable which means
> (1) the code cannot be shared across processes, it will
> actually use physical memory where the modified code is
> stored per process which is not ideal when you work with
> large code model, (2) all security policies have to be
> turned off that prevent exec+write mappings for this to
> work at all which is not acceptable in many environments.
I don't see how (2) applies. Both glibc and the previous patch only
remap text segments writable during relocation processing, and then
remap them back read-only immediately afterwards. If you're referring to
W^X, text segments don't need to be executable during relocation
processing either, so that can be avoided.
> for these reasons it is considered to be a bug to create
> binaries with textrels. i think large code model should
> not need textrel on x86_64: there should be a way to
> create >4G pc relative offset in code that does not need
> any relocs. (or do you have some example where that fails?)
Before D47211 (Clang/LLVM 7.0.0), PIC with the medium or large code
models is unsupported, and the compiler will silently ignore the PIC flag.
> dynamic linker failure diagnostic is something musl could
> improve i think.
How about something along the lines of the following?
>
>> diff --git a/ldso/dynlink.c b/ldso/dynlink.c
>> index d7726118..c7449df2 100644
>> --- a/ldso/dynlink.c
>> +++ b/ldso/dynlink.c
>> @@ -1326,10 +1326,32 @@ static void do_mips_relocs(struct dso *p, size_t *got)
>>
>> static void reloc_all(struct dso *p)
>> {
>> size_t dyn[DYN_CNT];
>> for (; p; p=p->next) {
>> if (p->relocated) continue;
>> decode_vec(p->dynv, dyn, DYN_CNT);
>> +
>> + if ((dyn[0] & 1<<DT_TEXTREL) || (dyn[DT_FLAGS] & DF_TEXTREL)) {
>> + error("Warning: TEXTREL not supported!",
>> +
>> if (NEED_MIPS_GOT_RELOCS)
>> do_mips_relocs(p, laddr(p, dyn[DT_PLTGOT]));
>> do_relocs(p, laddr(p, dyn[DT_JMPREL]), dyn[DT_PLTRELSZ],
>>
next prev parent reply other threads:[~2020-09-25 20:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-25 3:50 Dominic Chen
2020-09-25 9:37 ` Szabolcs Nagy
2020-09-25 18:58 ` Rich Felker
2020-09-25 20:13 ` Dominic Chen [this message]
2020-09-25 20:49 ` Markus Wichmann
2020-09-25 22:46 ` Rich Felker
2020-09-26 0:32 ` Dominic Chen
2020-09-26 4:14 ` Fangrui Song
2020-09-26 9:09 ` Szabolcs Nagy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7318ee2c-17f5-99a9-12e4-622fe94cbfe2@gmail.com \
--to=d.c.ddcc@gmail.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).