linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Michael Ellerman <mpe@ellerman.id.au>
To: Alan Modra <amodra@gmail.com>
Cc: Florian Weimer <fweimer@redhat.com>,
	linuxppc-dev@lists.ozlabs.org, linux-mm@kvack.org,
	keescook@chromium.org
Subject: Re: PIE binaries are no longer mapped below 4 GiB on ppc64le
Date: Fri, 02 Nov 2018 20:41:54 +1100	[thread overview]
Message-ID: <87d0rnerz1.fsf@concordia.ellerman.id.au> (raw)
In-Reply-To: <20181101064911.GB29482@bubble.grove.modra.org>

Alan Modra <amodra@gmail.com> writes:
> On Thu, Nov 01, 2018 at 02:55:34PM +1100, Michael Ellerman wrote:
>> Hi Florian,
>> 
>> Florian Weimer <fweimer@redhat.com> writes:
>> > We tried to use Go to build PIE binaries, and while the Go toolchain is
>> > definitely not ready (it produces text relocations and problematic
>> > relocations in general), it exposed what could be an accidental
>> > userspace ABI change.
>> >
>> > With our 4.10-derived kernel, PIE binaries are mapped below 4 GiB, so
>> > relocations like R_PPC64_ADDR16_HA work:
>> >
>> > 21f00000-220d0000 r-xp 00000000 fd:00 36593493                           /root/extld
>> > 220d0000-220e0000 r--p 001c0000 fd:00 36593493                           /root/extld
>> > 220e0000-22100000 rw-p 001d0000 fd:00 36593493                           /root/extld
>> ...
>> >
>> > With a 4.18-derived kernel (with the hashed mm), we get this instead:
>> >
>> > 120e60000-121030000 rw-p 00000000 fd:00 102447141                        /root/extld
>> > 121030000-121060000 rw-p 001c0000 fd:00 102447141                        /root/extld
>> > 121060000-121080000 rw-p 00000000 00:00 0 
>> 
>> I assume that's caused by:
>> 
>>   47ebb09d5485 ("powerpc: move ELF_ET_DYN_BASE to 4GB / 4MB")
>> 
>> Which did roughly:
>> 
>>   -#define ELF_ET_DYN_BASE	0x20000000
>>   +#define ELF_ET_DYN_BASE		(is_32bit_task() ? 0x000400000UL : \
>>   +					   0x100000000UL)
>> 
>> And went into 4.13.
>> 
>> > ...
>> > I'm not entirely sure what to make of this, but I'm worried that this
>> > could be a regression that matters to userspace.
>> 
>> It was a deliberate change, and it seemed to not break anything so we
>> merged it. But obviously we didn't test widely enough.
>> 
>> So I guess it clearly can matter to userspace, and it used to work, so
>> therefore it is a regression.
>> 
>> But at the same time we haven't had any other reports of breakage, so is
>> this somehow specific to something Go is doing? Or did we just get lucky
>> up until now? Or is no one actually testing on Power? ;)
>
> Mapping PIEs above 4G should be fine.  It works for gcc C and C++
> after all.  The problem is that ppc64le Go is generating code not
> suitable for a PIE.  Dynamic text relocations are evidence of non-PIC
> object files.
>
> Quoting Lynn Boger <boger@us.ibm.com>:
> "When building a pie binary with golang, they should be using
> -buildmode=pie and not just pass -pie to the linker".

Thanks Alan.

So this isn't a kernel bug per se, but the the old behaviour falls in
the category of "shouldn't have worked but did by accident", and so the
question is just how wide spread is the userspace breakage.

At least so far it seems not very wide spread, so we'll leave things as
they are for now. As Florian said we can always add a personality flag
in future if we need to.

cheers

  reply	other threads:[~2018-11-02  9:41 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-31 17:20 Florian Weimer
2018-10-31 17:50 ` Michal Suchánek
2018-10-31 17:54   ` Florian Weimer
2018-10-31 21:23     ` Tulio Magno Quites Machado Filho
2018-10-31 21:28       ` Florian Weimer
2018-10-31 22:04         ` Tulio Magno Quites Machado Filho
2018-10-31 22:41           ` Michal Suchánek
2018-10-31 22:24     ` Benjamin Herrenschmidt
2018-11-02  4:38     ` Nick Piggin
2018-11-01  3:55 ` Michael Ellerman
2018-11-01  6:49   ` Alan Modra
2018-11-02  9:41     ` Michael Ellerman [this message]
2018-11-01 11:20   ` Florian Weimer
2018-11-02  9:37     ` Michael Ellerman

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=87d0rnerz1.fsf@concordia.ellerman.id.au \
    --to=mpe@ellerman.id.au \
    --cc=amodra@gmail.com \
    --cc=fweimer@redhat.com \
    --cc=keescook@chromium.org \
    --cc=linux-mm@kvack.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    /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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox