Patchwork New syscalls to the seccomp whitelist

login
register
mail settings
Submitter Eduardo Otubo
Date Sept. 21, 2012, 12:40 p.m.
Message ID <1348231233-29841-1-git-send-email-otubo@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/185726/
State New
Headers show

Comments

Eduardo Otubo - Sept. 21, 2012, 12:40 p.m.
Seccomp syscall whitelist updated after tests running qemu under
libvirt. Reference to the bug -
https://bugzilla.redhat.com/show_bug.cgi?id=855162

Signed-off-by: Eduardo Otubo <otubo@linux.vnet.ibm.com>
---
 qemu-seccomp.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)
Eduardo Otubo - Sept. 24, 2012, 12:36 p.m.
Anyone interested in taking a look at this piece of code? Thanks!

On Fri, Sep 21, 2012 at 09:40:33AM -0300, Eduardo Otubo wrote:
> Seccomp syscall whitelist updated after tests running qemu under
> libvirt. Reference to the bug -
> https://bugzilla.redhat.com/show_bug.cgi?id=855162
> 
> Signed-off-by: Eduardo Otubo <otubo@linux.vnet.ibm.com>
> ---
>  qemu-seccomp.c | 21 ++++++++++++++++++++-
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/qemu-seccomp.c b/qemu-seccomp.c
> index 64329a3..4712338 100644
> --- a/qemu-seccomp.c
> +++ b/qemu-seccomp.c
> @@ -70,6 +70,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = {
>      { SCMP_SYS(setsockopt), 245},
>      { SCMP_SYS(uname), 245},
>      { SCMP_SYS(semget), 245},
> +    { SCMP_SYS(accept4), 241 },
>  #endif
>      { SCMP_SYS(eventfd2), 245 },
>      { SCMP_SYS(dup), 245 },
> @@ -107,7 +108,25 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = {
>      { SCMP_SYS(getsockname), 242 },
>      { SCMP_SYS(getpeername), 242 },
>      { SCMP_SYS(fdatasync), 242 },
> -    { SCMP_SYS(close), 242 }
> +    { SCMP_SYS(close), 242 },
> +    { SCMP_SYS(unlink), 241 },
> +    { SCMP_SYS(statfs), 241 },
> +    { SCMP_SYS(getuid), 241 },
> +    { SCMP_SYS(ftruncate), 241 },
> +    { SCMP_SYS(getegid), 241 },
> +    { SCMP_SYS(geteuid), 241 },
> +    { SCMP_SYS(getgid), 241 },
> +    { SCMP_SYS(getrlimit), 241 },
> +    { SCMP_SYS(set_tid_address), 241 },
> +    { SCMP_SYS(socketpair), 241 },
> +    { SCMP_SYS(fstatfs), 241 },
> +    { SCMP_SYS(epoll_create), 241 },
> +    { SCMP_SYS(epoll_ctl), 241 },
> +    { SCMP_SYS(epoll_wait), 241 },
> +    { SCMP_SYS(pipe), 241 },
> +    { SCMP_SYS(poll), 241 },
> +    { SCMP_SYS(rt_sigpending), 241 },
> +    { SCMP_SYS(rt_sigtimedwait), 241 },
>  };
> 
>  int seccomp_start(void)
> -- 
> 1.7.12
>
Cole Robinson - Sept. 26, 2012, 4:55 p.m.
On 09/21/2012 08:40 AM, Eduardo Otubo wrote:
> Seccomp syscall whitelist updated after tests running qemu under
> libvirt. Reference to the bug -
> https://bugzilla.redhat.com/show_bug.cgi?id=855162
> 
> Signed-off-by: Eduardo Otubo <otubo@linux.vnet.ibm.com>
> ---
>  qemu-seccomp.c | 21 ++++++++++++++++++++-
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/qemu-seccomp.c b/qemu-seccomp.c
> index 64329a3..4712338 100644
> --- a/qemu-seccomp.c
> +++ b/qemu-seccomp.c
> @@ -70,6 +70,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = {
>      { SCMP_SYS(setsockopt), 245},
>      { SCMP_SYS(uname), 245},
>      { SCMP_SYS(semget), 245},
> +    { SCMP_SYS(accept4), 241 },
>  #endif
>      { SCMP_SYS(eventfd2), 245 },
>      { SCMP_SYS(dup), 245 },
> @@ -107,7 +108,25 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = {
>      { SCMP_SYS(getsockname), 242 },
>      { SCMP_SYS(getpeername), 242 },
>      { SCMP_SYS(fdatasync), 242 },
> -    { SCMP_SYS(close), 242 }
> +    { SCMP_SYS(close), 242 },
> +    { SCMP_SYS(unlink), 241 },
> +    { SCMP_SYS(statfs), 241 },
> +    { SCMP_SYS(getuid), 241 },
> +    { SCMP_SYS(ftruncate), 241 },
> +    { SCMP_SYS(getegid), 241 },
> +    { SCMP_SYS(geteuid), 241 },
> +    { SCMP_SYS(getgid), 241 },
> +    { SCMP_SYS(getrlimit), 241 },
> +    { SCMP_SYS(set_tid_address), 241 },
> +    { SCMP_SYS(socketpair), 241 },
> +    { SCMP_SYS(fstatfs), 241 },
> +    { SCMP_SYS(epoll_create), 241 },
> +    { SCMP_SYS(epoll_ctl), 241 },
> +    { SCMP_SYS(epoll_wait), 241 },
> +    { SCMP_SYS(pipe), 241 },
> +    { SCMP_SYS(poll), 241 },
> +    { SCMP_SYS(rt_sigpending), 241 },
> +    { SCMP_SYS(rt_sigtimedwait), 241 },
>  };
>  
>  int seccomp_start(void)
> 

If this is required for libvirt + seccomp, might be a candidate for 1.2
stable, cc'ing. At the very least we will be carrying this in Fedora 18.

- Cole
Paul Moore - Sept. 26, 2012, 8:10 p.m.
On Friday, September 21, 2012 09:40:33 AM Eduardo Otubo wrote:
> Seccomp syscall whitelist updated after tests running qemu under
> libvirt. Reference to the bug -
> https://bugzilla.redhat.com/show_bug.cgi?id=855162

Unfortunately, this patch still does not work correctly for me using 
F17/libvirt and a F16 guest.  The QEMU instance starts, and the guest appears 
to be running, but I never see any of the BIOS POST messages on the console.

I'm attaching the guest's XML definition file if that helps.

> Signed-off-by: Eduardo Otubo <otubo@linux.vnet.ibm.com>
> ---
>  qemu-seccomp.c | 21 ++++++++++++++++++++-
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/qemu-seccomp.c b/qemu-seccomp.c
> index 64329a3..4712338 100644
> --- a/qemu-seccomp.c
> +++ b/qemu-seccomp.c
> @@ -70,6 +70,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[]
> = { { SCMP_SYS(setsockopt), 245},
>      { SCMP_SYS(uname), 245},
>      { SCMP_SYS(semget), 245},
> +    { SCMP_SYS(accept4), 241 },
>  #endif
>      { SCMP_SYS(eventfd2), 245 },
>      { SCMP_SYS(dup), 245 },
> @@ -107,7 +108,25 @@ static const struct QemuSeccompSyscall
> seccomp_whitelist[] = { { SCMP_SYS(getsockname), 242 },
>      { SCMP_SYS(getpeername), 242 },
>      { SCMP_SYS(fdatasync), 242 },
> -    { SCMP_SYS(close), 242 }
> +    { SCMP_SYS(close), 242 },
> +    { SCMP_SYS(unlink), 241 },
> +    { SCMP_SYS(statfs), 241 },
> +    { SCMP_SYS(getuid), 241 },
> +    { SCMP_SYS(ftruncate), 241 },
> +    { SCMP_SYS(getegid), 241 },
> +    { SCMP_SYS(geteuid), 241 },
> +    { SCMP_SYS(getgid), 241 },
> +    { SCMP_SYS(getrlimit), 241 },
> +    { SCMP_SYS(set_tid_address), 241 },
> +    { SCMP_SYS(socketpair), 241 },
> +    { SCMP_SYS(fstatfs), 241 },
> +    { SCMP_SYS(epoll_create), 241 },
> +    { SCMP_SYS(epoll_ctl), 241 },
> +    { SCMP_SYS(epoll_wait), 241 },
> +    { SCMP_SYS(pipe), 241 },
> +    { SCMP_SYS(poll), 241 },
> +    { SCMP_SYS(rt_sigpending), 241 },
> +    { SCMP_SYS(rt_sigtimedwait), 241 },
>  };
> 
>  int seccomp_start(void)

Patch

diff --git a/qemu-seccomp.c b/qemu-seccomp.c
index 64329a3..4712338 100644
--- a/qemu-seccomp.c
+++ b/qemu-seccomp.c
@@ -70,6 +70,7 @@  static const struct QemuSeccompSyscall seccomp_whitelist[] = {
     { SCMP_SYS(setsockopt), 245},
     { SCMP_SYS(uname), 245},
     { SCMP_SYS(semget), 245},
+    { SCMP_SYS(accept4), 241 },
 #endif
     { SCMP_SYS(eventfd2), 245 },
     { SCMP_SYS(dup), 245 },
@@ -107,7 +108,25 @@  static const struct QemuSeccompSyscall seccomp_whitelist[] = {
     { SCMP_SYS(getsockname), 242 },
     { SCMP_SYS(getpeername), 242 },
     { SCMP_SYS(fdatasync), 242 },
-    { SCMP_SYS(close), 242 }
+    { SCMP_SYS(close), 242 },
+    { SCMP_SYS(unlink), 241 },
+    { SCMP_SYS(statfs), 241 },
+    { SCMP_SYS(getuid), 241 },
+    { SCMP_SYS(ftruncate), 241 },
+    { SCMP_SYS(getegid), 241 },
+    { SCMP_SYS(geteuid), 241 },
+    { SCMP_SYS(getgid), 241 },
+    { SCMP_SYS(getrlimit), 241 },
+    { SCMP_SYS(set_tid_address), 241 },
+    { SCMP_SYS(socketpair), 241 },
+    { SCMP_SYS(fstatfs), 241 },
+    { SCMP_SYS(epoll_create), 241 },
+    { SCMP_SYS(epoll_ctl), 241 },
+    { SCMP_SYS(epoll_wait), 241 },
+    { SCMP_SYS(pipe), 241 },
+    { SCMP_SYS(poll), 241 },
+    { SCMP_SYS(rt_sigpending), 241 },
+    { SCMP_SYS(rt_sigtimedwait), 241 },
 };
 
 int seccomp_start(void)