]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
privsep: Fix Linux i386 for SECCOMP as it just uses socketcall
authorRoy Marples <roy@marples.name>
Sat, 12 Dec 2020 22:12:54 +0000 (22:12 +0000)
committerRoy Marples <roy@marples.name>
Sat, 12 Dec 2020 22:12:54 +0000 (22:12 +0000)
Rather than accept(2), recv(2), etc..... which is horrible!

Thanks to Steve Hirsch <stevehirsch49@msn.com> for testing.

src/privsep-linux.c

index 050a30cf1dbabd8f06719e0d36f8d5a0dfd48262..d31d720d2bb17909a38ba61f8eb2c28099ba6d55 100644 (file)
@@ -34,6 +34,7 @@
 
 #include <linux/audit.h>
 #include <linux/filter.h>
+#include <linux/net.h>
 #include <linux/seccomp.h>
 #include <linux/sockios.h>
 
@@ -311,6 +312,23 @@ static struct sock_filter ps_seccomp_filter[] = {
 #ifdef __NR_sendto
        SECCOMP_ALLOW(__NR_sendto),
 #endif
+#ifdef __NR_socketcall
+       /* i386 needs this and demonstrates why SECCOMP
+        * is poor compared to OpenBSD pledge(2) and FreeBSD capsicum(4)
+        * as this is soooo tied to the kernel API which changes per arch
+        * and likely libc as well. */
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_ACCEPT),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_ACCEPT4),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_LISTEN),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_GETSOCKOPT),  /* overflow */
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_RECV),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_RECVFROM),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_RECVMSG),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SEND),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SENDMSG),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SENDTO),
+       SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SHUTDOWN),
+#endif
 #ifdef __NR_shutdown
        SECCOMP_ALLOW(__NR_shutdown),
 #endif