Re: [PATCH v11 01/12] add support for Clang's Shadow Call Stack (SCS)
From: Will Deacon <will@kernel.org>
Date: 2020-05-04 16:52:38
Also in:
lkml
On Mon, Apr 27, 2020 at 01:45:46PM -0700, Sami Tolvanen wrote:
On Fri, Apr 24, 2020 at 12:21:14PM +0100, Will Deacon wrote:quoted
Also, since you mentioned the lack of redzoning, isn't it a bit dodgy allocating blindly out of the kmem_cache? It means we don't have a redzone or a guard page, so if you can trigger something like a recursion bug then could you scribble past the SCS before the main stack overflows? Would this clobber somebody else's SCS?I agree that allocating from a kmem_cache isn't ideal for safety. It's a compromise to reduce memory overhead.
Do you think it would be a problem if we always allocated a page for the SCS?
quoted
The vmap version that I asked Sami to drop is at least better in this regard, although the guard page is at the wrong end of the stack and we just hope that the allocation below us didn't pass VM_NO_GUARD. Looks like the same story for vmap stack :/SCS grows up and the guard page is after the allocation, so how is it at the wrong end? Am I missing something here?
Sorry, I'd got the SCS upside-down in my head (hey, that second 'S' stands for 'Stack'!). But I think I'm right about vmap stack, which feels a little fragile even though it seems to work out today with the very limited uses of VM_NO_GUARD.
quoted
If we split the pointer in two (base, offset) then we could leave the base live in the thread_info, not require alignment of the stacks (which may allow for unconditional redzoning?) and then just update the offset value on context switch, which could be trivially checked as part of the existing stack overflow checking on kernel entry.I sent out v13 with split pointers, but I'm not sure it's convenient to add an overflow check to kernel_ventry where the VMAP_STACK check is done. I suppose I could add a check to kernel_entry after we load x18 from tsk. Thoughts?
I'll take a look at v13, since at this stage I'm keen to get something queued up so that we can use it as a base for further improvements without you having to repost the whole stack every time. Cheers, Will _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel