On Thu, Sep 24, 2020 at 10:09 PM Kees Cook <keescook@xxxxxxxxxxxx> wrote: > Right, sorry, I may not have been clear. When building my RFC I noticed > that I couldn't use NR_syscall very "early" in the header file include > stack on arm64, which complicated things. So I guess what I mean is > something like "it's probably better to do all these seccomp-specific > macros/etc in asm/include/seccomp.h rather than in syscall.h because I > know at least one architecture that might cause trouble." Ah. Makes sense. > Ironicailly, that's the only place I actually know for sure where people > using x32 because it shows measurable (10%) speed-up for builders: > https://lore.kernel.org/lkml/CAOesGMgu1i3p7XMZuCEtj63T-ST_jh+BfaHy-K6LhgqNriKHAA@xxxxxxxxxxxxxx Wow. 10% is significant. Makes you wonder why x32 hasn't conquered the world. > So, yes, as you and Jann both point out, it wouldn't be terrible to just > ignore x32, it seems a shame to penalize it. That said, if the masking > step from my v1 is actually noticable on a native workload, then yeah, > probably x32 should be ignored. My instinct (not measured) is that it's > faster than walking a small array.[citation needed] My instinct: should be pretty similar, with the loop unrolled. You convince me that penalizing supporting x32 would be a pity :( The 10% is so nice I want it. > It's easier to do a per-arch revert (i.e. all the -stable tree > machinery, etc) with a single SHA instead of having to write a partial > revert, etc. I see. Thanks for clarifying. How about this? Rather than specifically designing names for bitmasks (native, compat, multiplex), just have SECCOMP_ARCH_{1,2,3}? Each arch number would provide the size of the bitmap and a static inline function to check the given seccomp_data belongs to the arch and if so, the order of the bit in the bitmap. There is no need for the shifts and madness in seccomp.c; it's arch-dependent code in their own seccomp.h. We let the preprocessor and compiler to make things optimized. YiFei Zhu