On Thu, Feb 16, 2012 at 13:17, H. Peter Anvin [off-list ref] wrote:
The other thing that you really need in addition to system call number is
ABI identifier, since a syscall number may mean different things for
different entry points. For example, on x86-64 system call number 4 is
write() if called via int $0x80 but stat() if called via syscall64. This is
a local property of the system call, not a global per process.
I think, the documentation said that as soon as prctl() is used to set
a bpf filter for system calls, it automatically disallows system calls
using an entry point other than the one used by this particular
prctl().
I was trying to come up with scenarios where this particular approach
causes problem, but I can't think of any off the top of my head. So,
it might actually turn out to be a very elegant way to reduce the
attack surface of the kernel. If we are really worried about userspace
compatibility, we could make the kernel send a signal instead of
terminating the program, if the wrong entry point was used; not sure
if that is needed, though.
Markus