On Wed, Jul 03, 2024 at 08:14:15PM GMT, Christian Brauner wrote: > On Wed, Jul 03, 2024 at 10:54:53AM GMT, Linus Torvalds wrote: > > On Wed, 3 Jul 2024 at 10:40, Linus Torvalds > > <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > > > Oh wow. Shows just *how* long ago that was - and how long ago I looked > > > at 32-bit code. Because clearly, I was wrong. > > > > Ok, so clearly any *new* 32-bit architecture should use 'struct statx' > > as 'struct stat', and at least avoid the conversion pain. > > > > Of course, if using <asm-generic/stat.h> like loongarch does, that is > > very much not what happens. You get those old models with just 'long'. > > > > So any architecture that didn't do that 'stat == statx' and has > > binaries with old stat models should just continue to have them. > > > > It's not like we can get rid of the kernel side code for that all _anyway_. > > Fwiw, the original motivation for that whole "let's do NULL with > AT_EMPTY_PATH" (somewhat independent from the generic use of it) that > somehow morphed into this discussion was that the Chrome Sandbox has > rewrites fstatat() system calls to fstat() via SECCOMP_RET_TRAP: > > if (args.nr == __NR_fstatat_default) { > if (*reinterpret_cast<const char*>(args.args[1]) == '\0' && > args.args[3] == static_cast<uint64_t>(AT_EMPTY_PATH)) { > return syscall(__NR_fstat_default, static_cast<int>(args.args[0]), > reinterpret_cast<default_stat_struct*>(args.args[2])); > } > > while also disabling statx() completely because they can't (easily) > rewrite it and don't want to allow it unless we have NULL for > AT_EMPTY_PATH (which we'll have soon ofc). > > In any case in [1] I proposed they add back fstat()/fstatat64() which > should get that problem solved because they can rewrite that thing. > > In any case, which one of these does a new architecture have to add for > reasonable backward compatibility: Going by riscv added in 2017 it would be: newstat() newlstat() newfstat() newfstatat() statx() > > fstat() > fstat64() > fstatat64() > > lstat() > lstat64() > > stat() > stat64() > statx() > > newstat() > newlstat() > newfstat() > newfstatat() > > Because really that's a complete mess and we have all sorts of overflow > issues and odd failures in the varioius variants. And the userspace > ifdefery in libcs is just as bad if not very much worse. > > [1]: https://lore.kernel.org/lkml/20240226-altmodisch-gedeutet-91c5ba2f6071@brauner