On Wed, Jun 23, 2021 at 08:04:11AM +1200, Michael Schmitz wrote:
All syscalls that _do_ save the switch stack are currently called through wrappers which pull the syscall arguments out of the saved pt_regs on the stack (pushing the switch stack after the SAVE_ALL saved stuff buries the syscall arguments on the stack, see comment about m68k_clone(). We'd have to push the switch stack _first_ when entering system_call to leave the syscall arguments in place, but that will require further changes to the syscall exit path (currently shared with the interrupt exit path). Not to mention the register offset calculations in arch/m68k/kernel/ptrace.c, and perhaps a few other dependencies that don't come to mind immediately. We have both pt_regs and switch_stack in uapi/asm/ptrace.h, but the ordering of the two is only mentioned in a comment. Can we reorder them on the stack, as long as we don't change the struct definitions proper? This will take a little more time to work out and test - certainly not before the weekend. I'll send a corrected version of my debug patch before that.
This is insane, *especially* on m68k where you have the mess with different frame layouts and associated ->stkadj crap (see mangle_kernel_stack() for the (very) full barfbag).