Thread (49 messages) 49 messages, 10 authors, 2014-08-16

Re: [RFC PATCH 00/11] Adding FreeBSD's Capsicum security framework (part 1)

From: Alexei Starovoitov <hidden>
Date: 2014-07-07 22:33:56
Also in: lkml, qemu-devel

On Mon, Jul 7, 2014 at 5:20 AM, Paolo Bonzini [off-list ref] wrote:
Il 07/07/2014 12:29, David Drysdale ha scritto:
quoted
quoted
I think that's more easily done by opening the file as O_RDONLY/O_WRONLY
/O_RDWR.   You could do it by running the file descriptor's seccomp-bpf
program once per iocb with synthesized syscall numbers and argument
vectors.

Right, but generating the equivalent seccomp input environment for an
equivalent single-fd syscall is going to be subtle and complex (which
are worrying words to mention in a security context).  And how many
other syscalls are going to need similar special-case processing?
(poll? select? send[m]msg? ...)

Yeah, the difficult part is getting the right balance between:

1) limitations due to seccomp's impossibility to chase pointers (which is
not something that can be lifted, as it's required for correctness)
btw once seccomp moves to eBPF it will be able to 'chase pointers',
since pointer walking will be possible via bpf_load_pointer() function call,
which is a wrapper of:
  probe_kernel_read(&ptr, unsafe_ptr, sizeof(void *));
  return ptr;
Not sure whether it helps this case or not. Just fyi.
2) subtlety and complexity of the resulting code.

The problem stems when you have a single a single syscall operating on
multiple file descriptors.  So for example among the cases you mention poll
and select are problematic; sendm?msg are not.  They would be if Capsicum
had a capability for SCM_RIGHTS file descriptor passing, but I cannot find
it.

But then you also have to strike the right balance between a complete
solution and an overengineered one.

For example, even though poll and select are problematic, I wonder what
would really the point be in blocking them; poll/select are level-triggered,
and calling them should be idempotent as far as the file descriptor is
concerned.  If you want to prevent a process/thread from issuing blocking
system calls, but you'd do that with a per-process filter, not with
per-file-descriptor filters or capabilities.

quoted
Capsicum capabilities are associated with the file descriptor (a la
F_GETFD), not the open file itself -- different FDs with different
associated rights can map to the same underlying open file.

Good to know, thanks.  I suppose you have testcases that cover this.

Paolo
--

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help