Subject: Re: ppc64 sbrk returns executable heap in 32-bit emulation mode

From: Andreas Schwab <[email-masked]>
Date: Mon, 16 May 2016 10:49:29 +0200

Alan Modra <[email-masked]> writes:

> On Thu, May 12, 2016 at 03:41:09PM +0200, Florian Weimer wrote:
>> We noticed that on ppc64, the sbrk system call in the 32-bit subsystem 
>> returns executable memory.  I assume it is related to this, in 
>> arch/powerpc/include/asm/page.h:
>> 
>> /*
>>   * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI,
>>   * and needs to be executable.  This means the whole heap ends
>>   * up being executable.
>>   */
>> #define VM_DATA_DEFAULT_FLAGS32 (VM_READ | VM_WRITE | VM_EXEC | \
>>                                   VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
>> 
>> 
>> What is the rationale for this?  This comment must be *really* old, 
>
> I think the comment is just plain wrong.  ppc32 needs an executable
> stack because it builds trampolines on the stack to support calling
> nested functions.  I presume that's why the heap is executable.

The stack and the heap are separate mappings.

>  (If
> I'm wrong about heap+stack needing the same protection then I can't
> think of any reason to require an executable heap.)

The heap and the BSS initially share the same page.

Andreas.

-- 
Andreas Schwab, [email-masked]
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."