Thread (23 messages) 23 messages, 2 authors, 2014-07-10

[PATCH v9 09/11] seccomp: introduce writer locking

From: Kees Cook <hidden>
Date: 2014-07-10 09:25:21
Also in: linux-api, linux-arch, linux-mips, lkml

On Wed, Jul 9, 2014 at 11:55 AM, Oleg Nesterov [off-list ref] wrote:
On 07/09, Oleg Nesterov wrote:
quoted
On 06/27, Kees Cook wrote:
quoted
 static u32 seccomp_run_filters(int syscall)
 {
-   struct seccomp_filter *f;
+   struct seccomp_filter *f = ACCESS_ONCE(current->seccomp.filter);
I am not sure...

This is fine if this ->filter is the 1st (and only) one, in this case
we can rely on rmb() in the caller.

But the new filter can be installed at any moment. Say, right after that
rmb() although this doesn't matter. Either we need smp_read_barrier_depends()
after that, or smp_load_acquire() like the previous version did?
Wait... and it seems that seccomp_sync_threads() needs smp_store_release()
when it sets thread->filter = current->filter by the same reason?

OTOH. smp_store_release() in seccomp_attach_filter() can die, "current"
doesn't need a barrier to serialize with itself.
I have lost track of what you're suggesting to change. :)

Since rmb() happens before run_filters, isn't the ACCESS_ONCE
sufficient? We only care that TIF_SECCOMP, mode, and some filter is
valid. In a tsync thread race, it's okay to use not use the deepest
filter node in the list, it just needs A filter.

-Kees

-- 
Kees Cook
Chrome OS Security
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help