diff options
| author | Serge E. Hallyn <serge.hallyn@canonical.com> | 2011-05-13 04:27:54 +0100 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-13 11:45:33 -0700 | 
| commit | 47a150edc2ae734c0f4bf50aa19499e23b9a46f8 (patch) | |
| tree | beeba9befd531285f663559a76f6f0f7378a6c2b /include/linux/capability.h | |
| parent | 381e7863d94891035a1a6b7836e9db72f9f1cba1 (diff) | |
| download | olio-linux-3.10-47a150edc2ae734c0f4bf50aa19499e23b9a46f8.tar.xz olio-linux-3.10-47a150edc2ae734c0f4bf50aa19499e23b9a46f8.zip  | |
Cache user_ns in struct cred
If !CONFIG_USERNS, have current_user_ns() defined to (&init_user_ns).
Get rid of _current_user_ns.  This requires nsown_capable() to be
defined in capability.c rather than as static inline in capability.h,
so do that.
Request_key needs init_user_ns defined at current_user_ns if
!CONFIG_USERNS, so forward-declare that in cred.h if !CONFIG_USERNS
at current_user_ns() define.
Compile-tested with and without CONFIG_USERNS.
Signed-off-by: Serge E. Hallyn <serge.hallyn@canonical.com>
[ This makes a huge performance difference for acl_permission_check(),
  up to 30%.  And that is one of the hottest kernel functions for loads
  that are pathname-lookup heavy.  ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/capability.h')
| -rw-r--r-- | include/linux/capability.h | 13 | 
1 files changed, 1 insertions, 12 deletions
diff --git a/include/linux/capability.h b/include/linux/capability.h index 16ee8b49a20..d4675af963f 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h @@ -546,18 +546,7 @@ extern bool has_capability_noaudit(struct task_struct *t, int cap);  extern bool capable(int cap);  extern bool ns_capable(struct user_namespace *ns, int cap);  extern bool task_ns_capable(struct task_struct *t, int cap); - -/** - * nsown_capable - Check superior capability to one's own user_ns - * @cap: The capability in question - * - * Return true if the current task has the given superior capability - * targeted at its own user namespace. - */ -static inline bool nsown_capable(int cap) -{ -	return ns_capable(current_user_ns(), cap); -} +extern bool nsown_capable(int cap);  /* audit system wants to get cap info from files as well */  extern int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data *cpu_caps);  |