On Wed, Oct 07, 2015 at 11:51:07AM +0300, Pavel Tikhomirov wrote:
> This reverts commit 750558eb81ef22527ee1d5fc5b5081410cffda29.

Pls, write commit message with explanation why do we need this changes.

In this case we need to find out who drop this capabilities. I think
vzctl does this. You can look at CAPDEFAULTMASK in libvzctl. Now we use
userns and a container can have all capabilites by default.

Thanks.

> 
> Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
> ---
>  security/commoncap.c | 37 ++++++++++++++++++++++++++++++-------
>  1 file changed, 30 insertions(+), 7 deletions(-)
> 
> diff --git a/security/commoncap.c b/security/commoncap.c
> index 3a7003d..9d0a2b6 100644
> --- a/security/commoncap.c
> +++ b/security/commoncap.c
> @@ -248,30 +248,53 @@ int cap_capset(struct cred *new,
>              const kernel_cap_t *inheritable,
>              const kernel_cap_t *permitted)
>  {
> +     kernel_cap_t ve_effective = *effective;
> +     kernel_cap_t ve_inheritable = *inheritable;
> +     kernel_cap_t ve_permitted = *permitted;
> +
> +     if (!ve_is_super(get_exec_env())) {
> +             if (cap_raised(old->cap_effective, CAP_SETPCAP)) {
> +                     /*
> +                      * Ignore all not allowed caps in CT
> +                      */
> +                     printk_once("Drop not allowed caps in CT. Docker? - "
> +                                 "Will fix when switch to user 
> namespaces.\n");
> +                     if (cap_inh_is_capped())
> +                             ve_inheritable = cap_intersect(ve_inheritable,
> +                                                            
> cap_combine(old->cap_inheritable,
> +                                                                        
> old->cap_permitted));
> +                     ve_inheritable = cap_intersect(ve_inheritable,
> +                                                    
> cap_combine(old->cap_inheritable,
> +                                                                
> old->cap_bset));
> +                     ve_permitted = cap_intersect(ve_permitted, 
> old->cap_permitted);
> +                     ve_effective = cap_intersect(ve_effective, 
> ve_permitted);
> +             }
> +     }
> +
>       if (cap_inh_is_capped() &&
> -         !cap_issubset(*inheritable,
> +         !cap_issubset(ve_inheritable,
>                         cap_combine(old->cap_inheritable,
>                                     old->cap_permitted)))
>               /* incapable of using this inheritable set */
>               return -EPERM;
>  
> -     if (!cap_issubset(*inheritable,
> +     if (!cap_issubset(ve_inheritable,
>                         cap_combine(old->cap_inheritable,
>                                     old->cap_bset)))
>               /* no new pI capabilities outside bounding set */
>               return -EPERM;
>  
>       /* verify restrictions on target's new Permitted set */
> -     if (!cap_issubset(*permitted, old->cap_permitted))
> +     if (!cap_issubset(ve_permitted, old->cap_permitted))
>               return -EPERM;
>  
>       /* verify the _new_Effective_ is a subset of the _new_Permitted_ */
> -     if (!cap_issubset(*effective, *permitted))
> +     if (!cap_issubset(ve_effective, ve_permitted))
>               return -EPERM;
>  
> -     new->cap_effective   = *effective;
> -     new->cap_inheritable = *inheritable;
> -     new->cap_permitted   = *permitted;
> +     new->cap_effective   = ve_effective;
> +     new->cap_inheritable = ve_inheritable;
> +     new->cap_permitted   = ve_permitted;
>       return 0;
>  }
>  
> -- 
> 1.9.3
> 
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to