On Tue, Aug 08, 2023 at 09:21:03AM +0100, Szabolcs Nagy wrote:
The 08/07/2023 14:00, Mark Brown wrote:
That's not what the manual page or a quick check of the code suggest that mmap() does, they say that the kernel just takes it as a hint and
i should have said that i expect MAP_FIXED_NOREPLACE semantics (since the x86 code seemed to use that) and then the mapped address must match exactly thus page aligned.
Ah, I see. We do pass MAP_FIXED_NOREPLACE when allocating the stack if an address was specified but currently leave it up to the VM subsystem to figure out what to do with the address. I don't immediately see where mmap() enforces this requirement, but I have to admit I didn't look overly hard. I don't see a problem with enforcing a PAGE_SIZE constraint here.
- if (size == 16 || size % 16)
return -EINVAL;
why %16 and not %8 ?
I don't think that's needed any more - there was some stuff in an earlier version of the code but no longer.
it's kind of important to know the exact logic so the cap token location can be computed in userspace for arbitrary size.
(this is why i wanted to see the map_shadow_stack man page first but i was told that comes separately on linux..)
Right, I'd already changed it to % 8 in the version I posted yesterday.