X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=ipc%2Fnamespace.c;h=59451c1e214d71f1b771b764d309b20759e19eb6;hb=7431105b143098c3fc0ced8f9974b792f76198d7;hp=7ee61bf449332bbb556f4742e72c8f54c8111d89;hpb=7ecba6f2f3f6e862287e07908ba583199c7772a9;p=~andy%2Flinux diff --git a/ipc/namespace.c b/ipc/namespace.c index 7ee61bf4493..59451c1e214 100644 --- a/ipc/namespace.c +++ b/ipc/namespace.c @@ -81,7 +81,7 @@ void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids, int next_id; int total, in_use; - down_write(&ids->rw_mutex); + down_write(&ids->rwsem); in_use = ids->in_use; @@ -89,11 +89,12 @@ void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids, perm = idr_find(&ids->ipcs_idr, next_id); if (perm == NULL) continue; - ipc_lock_by_ptr(perm); + rcu_read_lock(); + ipc_lock_object(perm); free(ns, perm); total++; } - up_write(&ids->rw_mutex); + up_write(&ids->rwsem); } static void free_ipc_ns(struct ipc_namespace *ns) @@ -171,7 +172,7 @@ static int ipcns_install(struct nsproxy *nsproxy, void *new) { struct ipc_namespace *ns = new; if (!ns_capable(ns->user_ns, CAP_SYS_ADMIN) || - !nsown_capable(CAP_SYS_ADMIN)) + !ns_capable(current_user_ns(), CAP_SYS_ADMIN)) return -EPERM; /* Ditch state from the old ipc namespace */