<div dir="ltr"><div dir="ltr">On Sun, 16 Aug 2020 at 14:54, Lennart Poettering <<a href="mailto:lennart@poettering.net">lennart@poettering.net</a>> wrote:<br></div><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> I've just been bitten by this - last time I looked into a similar problem,<br>
> it seemed the calling code was confused by getting EPERM instead of ENOSYS.<br>
> Could we distinguish between these two cases and generate the right error<br>
> code? It would save a lot of aggro when working with containers..<br></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Which error to return is a bit of a bikeshedding thing.<br>
<br>
We return EPERM because this is about sandboxing for us, i.e. access<br>
control. And we want to communicate that correctly to payloads, so we<br>
say so.<br>
<br>
ENOSYS would be something we'd return if we'd pretend that something<br>
isn't available even though it is.<br></blockquote><div><br></div><div>I'm assuming we don't actually check what's available on the host kernel.. All the problems I've hit around this have been new syscalls which libc tests for by checking for ENOSYS - if it gets that, it falls back to a different implementation. If it gets EPERM, however, it just assumes the operation failed and returns to caller, which leaves poor users like me and the OP scratching their heads :)</div><div><br></div><div>A rule of thumb might be to return ENOSYS for anything libseccomp doesn't know about - is it possible to look things up that way around?</div><div><br></div><div>Another useful thing might be to allow whitelisting by syscall number - again don't know if seccomp allows this. Would allow easier work arounds in cases like this without having to go off and backport libseccomp...</div><div><br></div><div>Third thing on my wishlist might be a log entry for denied syscalls somewhere ..</div><div> </div><div>S.</div></div></div>