This is buggy, don't use it as-is.

On Mon, 14 Feb 2011, James Morris wrote:

> ---------- Forwarded message ----------
> Date: Sat, 12 Feb 2011 00:59:18 GMT
> From: Linux Kernel Mailing List <[email protected]>
> To: [email protected]
> Subject: security: add cred argument to security_capable()
> 
> Gitweb:     
> http://git.kernel.org/linus/6037b715d6fab139742c3df8851db4c823081561
> Commit:     6037b715d6fab139742c3df8851db4c823081561
> Parent:     deabb19ba4bd8c06ae69bc262e3594b515e3a459
> Author:     Chris Wright <[email protected]>
> AuthorDate: Wed Feb 9 22:11:51 2011 -0800
> Committer:  James Morris <[email protected]>
> CommitDate: Fri Feb 11 17:41:58 2011 +1100
> 
>     security: add cred argument to security_capable()
>     
>     Expand security_capable() to include cred, so that it can be usable in a
>     wider range of call sites.
>     
>     Signed-off-by: Chris Wright <[email protected]>
>     Acked-by: Serge Hallyn <[email protected]>
>     Signed-off-by: James Morris <[email protected]>
> ---
>  include/linux/security.h |    6 +++---
>  kernel/capability.c      |    2 +-
>  security/security.c      |    5 ++---
>  3 files changed, 6 insertions(+), 7 deletions(-)
> 
> diff --git a/include/linux/security.h b/include/linux/security.h
> index c642bb8..b2b7f97 100644
> --- a/include/linux/security.h
> +++ b/include/linux/security.h
> @@ -1662,7 +1662,7 @@ int security_capset(struct cred *new, const struct cred 
> *old,
>                   const kernel_cap_t *effective,
>                   const kernel_cap_t *inheritable,
>                   const kernel_cap_t *permitted);
> -int security_capable(int cap);
> +int security_capable(const struct cred *cred, int cap);
>  int security_real_capable(struct task_struct *tsk, int cap);
>  int security_real_capable_noaudit(struct task_struct *tsk, int cap);
>  int security_sysctl(struct ctl_table *table, int op);
> @@ -1856,9 +1856,9 @@ static inline int security_capset(struct cred *new,
>       return cap_capset(new, old, effective, inheritable, permitted);
>  }
>  
> -static inline int security_capable(int cap)
> +static inline int security_capable(const struct cred *cred, int cap)
>  {
> -     return cap_capable(current, current_cred(), cap, SECURITY_CAP_AUDIT);
> +     return cap_capable(current, cred, cap, SECURITY_CAP_AUDIT);
>  }
>  
>  static inline int security_real_capable(struct task_struct *tsk, int cap)
> diff --git a/kernel/capability.c b/kernel/capability.c
> index 2f05303..9e9385f 100644
> --- a/kernel/capability.c
> +++ b/kernel/capability.c
> @@ -306,7 +306,7 @@ int capable(int cap)
>               BUG();
>       }
>  
> -     if (security_capable(cap) == 0) {
> +     if (security_capable(current_cred(), cap) == 0) {
>               current->flags |= PF_SUPERPRIV;
>               return 1;
>       }
> diff --git a/security/security.c b/security/security.c
> index 739e403..7b7308a 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -154,10 +154,9 @@ int security_capset(struct cred *new, const struct cred 
> *old,
>                                   effective, inheritable, permitted);
>  }
>  
> -int security_capable(int cap)
> +int security_capable(const struct cred *cred, int cap)
>  {
> -     return security_ops->capable(current, current_cred(), cap,
> -                                  SECURITY_CAP_AUDIT);
> +     return security_ops->capable(current, cred, cap, SECURITY_CAP_AUDIT);
>  }
>  
>  int security_real_capable(struct task_struct *tsk, int cap)
> --
> To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 
James Morris
<[email protected]>

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to