Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes: > On Tue, May 5, 2020 at 3:13 AM Christoph Hellwig <hch@xxxxxx> wrote: >> >> this series gets rid of playing with the address limit in the exec and >> coredump code. Most of this was fairly trivial, the biggest changes are >> those to the spufs coredump code. > > Ack, nice, and looks good. > > The only part I dislike is how we have that 'struct compat_siginfo' on > the stack, which is a huge waste (most of it is the nasty padding to > 128 bytes). > > But that's not new, I only reacted to it because the code moved a bit. > We cleaned up the regular siginfo to not have the padding in the > kernel (and by "we" I mean "Eric Biederman did it after some prodding > as part of his siginfo cleanups" - see commit 4ce5f9c9e754 "signal: > Use a smaller struct siginfo in the kernel"), and I wonder if we > could do something similar with that compat thing. > > 128 bytes of wasted kernel stack isn't the end of the world, but it's > sad when the *actual* data is only 32 bytes or so. We probably can. After introducing a kernel_compat_siginfo that is the size that userspace actually would need. It isn't something I want to mess with until this code gets merged, as I think the set_fs cleanups are more important. Christoph made some good points about how ugly the #ifdefs are in the generic copy_siginfo_to_user32 implementation. I am thinking the right fix is to introduce. - TS_X32 as a companion to TS_COMPAT in the x86_64. - Modify in_x32_syscall() to test TS_X32 - Implement x32_copy_siginfo_to_user32 that forces TS_X32 to be set. AKA: x32_copy_siginfo_to_user32() { unsigned long state = current_thread_info()->state; current_thread_info()->state |= TS_X32; copy_siginfo_to_user32(); current_thread_info()->state = state; } That would make the #ifdefs go away, but I don't yet know what the x86 maintainers would say about that scheme. I think it is a good path as it would isolate the runtime cost of that weird SIGCHLD siginfo format to just x32. Then ia32 in compat mode would not need to pay. Once I get that then it will be easier to introduce a yet another helper of copy_siginfo_to_user32 that generates just the kernel_compat_siginfo part, and the two visible derivatives can call memset and clear_user to clear the unset parts. I am assuming you don't don't mind having a full siginfo in elf_note_info that ultimately gets copied into the core dump? Eric