1 From 12cdb2be46e25e1ab99df18324b787ad8749dff7 Mon Sep 17 00:00:00 2001
2 From: Roy Marples <roy@marples.name>
3 Date: Sat, 12 Dec 2020 22:12:54 +0000
4 Subject: [PATCH] privsep: Fix Linux i386 for SECCOMP as it just uses
7 Rather than accept(2), recv(2), etc..... which is horrible!
9 Thanks to Steve Hirsch <stevehirsch49@msn.com> for testing.
11 Upstream-Status: Backport
12 [https://roy.marples.name/cgit/dhcpcd.git/commit/?id=12cdb2be46e25e1ab99df18324b787ad8749dff7]
14 Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
16 src/privsep-linux.c | 18 ++++++++++++++++++
17 1 file changed, 18 insertions(+)
19 diff --git a/src/privsep-linux.c b/src/privsep-linux.c
20 index 050a30cf..d31d720d 100644
21 --- a/src/privsep-linux.c
22 +++ b/src/privsep-linux.c
25 #include <linux/audit.h>
26 #include <linux/filter.h>
27 +#include <linux/net.h>
28 #include <linux/seccomp.h>
29 #include <linux/sockios.h>
31 @@ -311,6 +312,23 @@ static struct sock_filter ps_seccomp_filter[] = {
33 SECCOMP_ALLOW(__NR_sendto),
35 +#ifdef __NR_socketcall
36 + /* i386 needs this and demonstrates why SECCOMP
37 + * is poor compared to OpenBSD pledge(2) and FreeBSD capsicum(4)
38 + * as this is soooo tied to the kernel API which changes per arch
39 + * and likely libc as well. */
40 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_ACCEPT),
41 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_ACCEPT4),
42 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_LISTEN),
43 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_GETSOCKOPT), /* overflow */
44 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_RECV),
45 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_RECVFROM),
46 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_RECVMSG),
47 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SEND),
48 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SENDMSG),
49 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SENDTO),
50 + SECCOMP_ALLOW_ARG(__NR_socketcall, 0, SYS_SHUTDOWN),
53 SECCOMP_ALLOW(__NR_shutdown),