ppc64 sbrk returns executable heap in 32-bit emulation mode
Andreas Schwab
schwab at linux-m68k.org
Mon May 16 18:49:29 AEST 2016
Alan Modra <amodra at gmail.com> 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, schwab at linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
More information about the Linuxppc-dev
mailing list