[ Re-sending because I accidentially replied only to Andy ] On Fri, Jul 20, 2018 at 10:09:26AM -0700, Andy Lutomirski wrote: > Can you give an example of the exact scenario in which any of this > copying happens and why it's needed? IMO you should just be able to > *run* on the entry stack without copying anything at all. So for example when we execute RESTORE_REGS on the path back to user-space and get an exception while loading the user segment registers. When that happens we are already on the entry-stack and on user-cr3. There is no question that when we return from the exception we need to get back to entry-stack and user-cr3, despite we are returning to kernel mode. Otherwise we enter user-space with kernel-cr3 or get a page-fault and panic. The exception runs through the common_exception path, and finally ends up calling C code. And correct me if I am wrong, but calling into C code from the entry-stack is a bad idea for multiple reasons. First reason is the size of the stack. We can make it larger, but how large does it need to be? Next problem is that current_pt_regs doesn't work in the C code when pt_regs are on the entry-stack. These problems can all be solved, but it wouldn't be a robust solution because when changes to the C code are made they are usually not tested while on the entry-stack. That case is hard to trigger, so it can easily break again. For me, only the x86 selftests triggered all these corner-cases, but not all developers run them on 32 bit when making changes to generic x86 code. Regards, Joerg