On 06/22/2016 12:20 PM, Andy Lutomirski wrote:
As an example, a 32-bit x86 program really could have something mapped above the 32-bit boundary. It just wouldn't be useful, but the kernel should still understand that it's *user* memory.
So you'd have PR_SET_MMAP_LIMIT and PR_GET_MMAP_LIMIT or similar instead.
+1. Also it might be (not sure though, just guessing) suitable to do such thing via memory cgroup controller, instead of carrying this limit per each process (or task structure/vma or mm).
I think we'll want this per mm. After all, a high-VA-limit-aware bash should be able run high-VA-unaware programs without fiddling with cgroups.
Yeah, cgroups don't make a lot of sense.
On x86, the 48-bit virtual address is even hard-coded in the ABI[1]. So we can't change *any* program's layout without either breaking the ABI or having it opt in.
But, we're also lucky to only have one VA layout since day one.
1. www.x86-64.org/documentation/abi.pdf - “... Therefore, conforming processes may only use addresses from 0x00000000 00000000 to 0x00007fff ffffffff .”