On December 1, 2018 5:35:45 AM GMT+13:00, Andy Lutomirski <luto@xxxxxxxxxx> wrote: >On Fri, Nov 30, 2018 at 3:41 AM Arnd Bergmann <arnd@xxxxxxxx> wrote: >> siginfo_t as it is now still has a number of other downsides, and >Andy in >> particular didn't like the idea of having three new variants on x86 >> (depending on how you count). His alternative suggestion of having >> a single syscall entry point that takes a 'signfo_t __user *' but >interprets >> it as compat_siginfo depending on >in_compat_syscall()/in_x32_syscall() >> should work correctly, but feels wrong to me, or at least >inconsistent >> with how we do this elsewhere. > >If everyone else is okay with it, I can get on board with three >variants on x86. What I can't get on board with is *five* variants on Thanks Andy, that helps a lot. I'm okay with it. Does this require any additional changes to how the syscall is currently hooked up? >x86, which would be: > >procfd_signal via int80 / the 32-bit vDSO: the ia32 structure > >syscall64 with nr == 335 (presumably): 64-bit > >syscall64 with nr == 548 | 0x40000000: x32 > >syscall64 with nr == 548: 64-bit entry but in_compat_syscall() == >true, behavior is arbitrary > >syscall64 with nr == 335 | 0x40000000: x32 entry, but >in_compat_syscall() == false, behavior is arbitrary > >This mess isn't really Christian's fault -- it's been there for a >while, but it's awful and I don't think we want to perpetuate it. > >Obviously, I'd prefer a variant where the structure that's passed in >is always the same. > >BTW, do we consider siginfo_t to be extensible? If so, and if we pass I would prefer if we could consider it extensible. If so I would prefer if we could pass in a size argument. >in a pointer, presumably we should pass a length as well.