linux/security/commoncap.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/* Common capabilities, needed by capability.o.
   3 */
   4
   5#include <linux/capability.h>
   6#include <linux/audit.h>
   7#include <linux/init.h>
   8#include <linux/kernel.h>
   9#include <linux/lsm_hooks.h>
  10#include <linux/file.h>
  11#include <linux/mm.h>
  12#include <linux/mman.h>
  13#include <linux/pagemap.h>
  14#include <linux/swap.h>
  15#include <linux/skbuff.h>
  16#include <linux/netlink.h>
  17#include <linux/ptrace.h>
  18#include <linux/xattr.h>
  19#include <linux/hugetlb.h>
  20#include <linux/mount.h>
  21#include <linux/sched.h>
  22#include <linux/prctl.h>
  23#include <linux/securebits.h>
  24#include <linux/user_namespace.h>
  25#include <linux/binfmts.h>
  26#include <linux/personality.h>
  27#include <linux/mnt_idmapping.h>
  28
  29/*
  30 * If a non-root user executes a setuid-root binary in
  31 * !secure(SECURE_NOROOT) mode, then we raise capabilities.
  32 * However if fE is also set, then the intent is for only
  33 * the file capabilities to be applied, and the setuid-root
  34 * bit is left on either to change the uid (plausible) or
  35 * to get full privilege on a kernel without file capabilities
  36 * support.  So in that case we do not raise capabilities.
  37 *
  38 * Warn if that happens, once per boot.
  39 */
  40static void warn_setuid_and_fcaps_mixed(const char *fname)
  41{
  42        static int warned;
  43        if (!warned) {
  44                printk(KERN_INFO "warning: `%s' has both setuid-root and"
  45                        " effective capabilities. Therefore not raising all"
  46                        " capabilities.\n", fname);
  47                warned = 1;
  48        }
  49}
  50
  51/**
  52 * cap_capable - Determine whether a task has a particular effective capability
  53 * @cred: The credentials to use
  54 * @targ_ns:  The user namespace in which we need the capability
  55 * @cap: The capability to check for
  56 * @opts: Bitmask of options defined in include/linux/security.h
  57 *
  58 * Determine whether the nominated task has the specified capability amongst
  59 * its effective set, returning 0 if it does, -ve if it does not.
  60 *
  61 * NOTE WELL: cap_has_capability() cannot be used like the kernel's capable()
  62 * and has_capability() functions.  That is, it has the reverse semantics:
  63 * cap_has_capability() returns 0 when a task has a capability, but the
  64 * kernel's capable() and has_capability() returns 1 for this case.
  65 */
  66int cap_capable(const struct cred *cred, struct user_namespace *targ_ns,
  67                int cap, unsigned int opts)
  68{
  69        struct user_namespace *ns = targ_ns;
  70
  71        /* See if cred has the capability in the target user namespace
  72         * by examining the target user namespace and all of the target
  73         * user namespace's parents.
  74         */
  75        for (;;) {
  76                /* Do we have the necessary capabilities? */
  77                if (ns == cred->user_ns)
  78                        return cap_raised(cred->cap_effective, cap) ? 0 : -EPERM;
  79
  80                /*
  81                 * If we're already at a lower level than we're looking for,
  82                 * we're done searching.
  83                 */
  84                if (ns->level <= cred->user_ns->level)
  85                        return -EPERM;
  86
  87                /* 
  88                 * The owner of the user namespace in the parent of the
  89                 * user namespace has all caps.
  90                 */
  91                if ((ns->parent == cred->user_ns) && uid_eq(ns->owner, cred->euid))
  92                        return 0;
  93
  94                /*
  95                 * If you have a capability in a parent user ns, then you have
  96                 * it over all children user namespaces as well.
  97                 */
  98                ns = ns->parent;
  99        }
 100
 101        /* We never get here */
 102}
 103
 104/**
 105 * cap_settime - Determine whether the current process may set the system clock
 106 * @ts: The time to set
 107 * @tz: The timezone to set
 108 *
 109 * Determine whether the current process may set the system clock and timezone
 110 * information, returning 0 if permission granted, -ve if denied.
 111 */
 112int cap_settime(const struct timespec64 *ts, const struct timezone *tz)
 113{
 114        if (!capable(CAP_SYS_TIME))
 115                return -EPERM;
 116        return 0;
 117}
 118
 119/**
 120 * cap_ptrace_access_check - Determine whether the current process may access
 121 *                         another
 122 * @child: The process to be accessed
 123 * @mode: The mode of attachment.
 124 *
 125 * If we are in the same or an ancestor user_ns and have all the target
 126 * task's capabilities, then ptrace access is allowed.
 127 * If we have the ptrace capability to the target user_ns, then ptrace
 128 * access is allowed.
 129 * Else denied.
 130 *
 131 * Determine whether a process may access another, returning 0 if permission
 132 * granted, -ve if denied.
 133 */
 134int cap_ptrace_access_check(struct task_struct *child, unsigned int mode)
 135{
 136        int ret = 0;
 137        const struct cred *cred, *child_cred;
 138        const kernel_cap_t *caller_caps;
 139
 140        rcu_read_lock();
 141        cred = current_cred();
 142        child_cred = __task_cred(child);
 143        if (mode & PTRACE_MODE_FSCREDS)
 144                caller_caps = &cred->cap_effective;
 145        else
 146                caller_caps = &cred->cap_permitted;
 147        if (cred->user_ns == child_cred->user_ns &&
 148            cap_issubset(child_cred->cap_permitted, *caller_caps))
 149                goto out;
 150        if (ns_capable(child_cred->user_ns, CAP_SYS_PTRACE))
 151                goto out;
 152        ret = -EPERM;
 153out:
 154        rcu_read_unlock();
 155        return ret;
 156}
 157
 158/**
 159 * cap_ptrace_traceme - Determine whether another process may trace the current
 160 * @parent: The task proposed to be the tracer
 161 *
 162 * If parent is in the same or an ancestor user_ns and has all current's
 163 * capabilities, then ptrace access is allowed.
 164 * If parent has the ptrace capability to current's user_ns, then ptrace
 165 * access is allowed.
 166 * Else denied.
 167 *
 168 * Determine whether the nominated task is permitted to trace the current
 169 * process, returning 0 if permission is granted, -ve if denied.
 170 */
 171int cap_ptrace_traceme(struct task_struct *parent)
 172{
 173        int ret = 0;
 174        const struct cred *cred, *child_cred;
 175
 176        rcu_read_lock();
 177        cred = __task_cred(parent);
 178        child_cred = current_cred();
 179        if (cred->user_ns == child_cred->user_ns &&
 180            cap_issubset(child_cred->cap_permitted, cred->cap_permitted))
 181                goto out;
 182        if (has_ns_capability(parent, child_cred->user_ns, CAP_SYS_PTRACE))
 183                goto out;
 184        ret = -EPERM;
 185out:
 186        rcu_read_unlock();
 187        return ret;
 188}
 189
 190/**
 191 * cap_capget - Retrieve a task's capability sets
 192 * @target: The task from which to retrieve the capability sets
 193 * @effective: The place to record the effective set
 194 * @inheritable: The place to record the inheritable set
 195 * @permitted: The place to record the permitted set
 196 *
 197 * This function retrieves the capabilities of the nominated task and returns
 198 * them to the caller.
 199 */
 200int cap_capget(struct task_struct *target, kernel_cap_t *effective,
 201               kernel_cap_t *inheritable, kernel_cap_t *permitted)
 202{
 203        const struct cred *cred;
 204
 205        /* Derived from kernel/capability.c:sys_capget. */
 206        rcu_read_lock();
 207        cred = __task_cred(target);
 208        *effective   = cred->cap_effective;
 209        *inheritable = cred->cap_inheritable;
 210        *permitted   = cred->cap_permitted;
 211        rcu_read_unlock();
 212        return 0;
 213}
 214
 215/*
 216 * Determine whether the inheritable capabilities are limited to the old
 217 * permitted set.  Returns 1 if they are limited, 0 if they are not.
 218 */
 219static inline int cap_inh_is_capped(void)
 220{
 221        /* they are so limited unless the current task has the CAP_SETPCAP
 222         * capability
 223         */
 224        if (cap_capable(current_cred(), current_cred()->user_ns,
 225                        CAP_SETPCAP, CAP_OPT_NONE) == 0)
 226                return 0;
 227        return 1;
 228}
 229
 230/**
 231 * cap_capset - Validate and apply proposed changes to current's capabilities
 232 * @new: The proposed new credentials; alterations should be made here
 233 * @old: The current task's current credentials
 234 * @effective: A pointer to the proposed new effective capabilities set
 235 * @inheritable: A pointer to the proposed new inheritable capabilities set
 236 * @permitted: A pointer to the proposed new permitted capabilities set
 237 *
 238 * This function validates and applies a proposed mass change to the current
 239 * process's capability sets.  The changes are made to the proposed new
 240 * credentials, and assuming no error, will be committed by the caller of LSM.
 241 */
 242int cap_capset(struct cred *new,
 243               const struct cred *old,
 244               const kernel_cap_t *effective,
 245               const kernel_cap_t *inheritable,
 246               const kernel_cap_t *permitted)
 247{
 248        if (cap_inh_is_capped() &&
 249            !cap_issubset(*inheritable,
 250                          cap_combine(old->cap_inheritable,
 251                                      old->cap_permitted)))
 252                /* incapable of using this inheritable set */
 253                return -EPERM;
 254
 255        if (!cap_issubset(*inheritable,
 256                          cap_combine(old->cap_inheritable,
 257                                      old->cap_bset)))
 258                /* no new pI capabilities outside bounding set */
 259                return -EPERM;
 260
 261        /* verify restrictions on target's new Permitted set */
 262        if (!cap_issubset(*permitted, old->cap_permitted))
 263                return -EPERM;
 264
 265        /* verify the _new_Effective_ is a subset of the _new_Permitted_ */
 266        if (!cap_issubset(*effective, *permitted))
 267                return -EPERM;
 268
 269        new->cap_effective   = *effective;
 270        new->cap_inheritable = *inheritable;
 271        new->cap_permitted   = *permitted;
 272
 273        /*
 274         * Mask off ambient bits that are no longer both permitted and
 275         * inheritable.
 276         */
 277        new->cap_ambient = cap_intersect(new->cap_ambient,
 278                                         cap_intersect(*permitted,
 279                                                       *inheritable));
 280        if (WARN_ON(!cap_ambient_invariant_ok(new)))
 281                return -EINVAL;
 282        return 0;
 283}
 284
 285/**
 286 * cap_inode_need_killpriv - Determine if inode change affects privileges
 287 * @dentry: The inode/dentry in being changed with change marked ATTR_KILL_PRIV
 288 *
 289 * Determine if an inode having a change applied that's marked ATTR_KILL_PRIV
 290 * affects the security markings on that inode, and if it is, should
 291 * inode_killpriv() be invoked or the change rejected.
 292 *
 293 * Return: 1 if security.capability has a value, meaning inode_killpriv()
 294 * is required, 0 otherwise, meaning inode_killpriv() is not required.
 295 */
 296int cap_inode_need_killpriv(struct dentry *dentry)
 297{
 298        struct inode *inode = d_backing_inode(dentry);
 299        int error;
 300
 301        error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0);
 302        return error > 0;
 303}
 304
 305/**
 306 * cap_inode_killpriv - Erase the security markings on an inode
 307 *
 308 * @mnt_userns: user namespace of the mount the inode was found from
 309 * @dentry:     The inode/dentry to alter
 310 *
 311 * Erase the privilege-enhancing security markings on an inode.
 312 *
 313 * If the inode has been found through an idmapped mount the user namespace of
 314 * the vfsmount must be passed through @mnt_userns. This function will then
 315 * take care to map the inode according to @mnt_userns before checking
 316 * permissions. On non-idmapped mounts or if permission checking is to be
 317 * performed on the raw inode simply passs init_user_ns.
 318 *
 319 * Return: 0 if successful, -ve on error.
 320 */
 321int cap_inode_killpriv(struct user_namespace *mnt_userns, struct dentry *dentry)
 322{
 323        int error;
 324
 325        error = __vfs_removexattr(mnt_userns, dentry, XATTR_NAME_CAPS);
 326        if (error == -EOPNOTSUPP)
 327                error = 0;
 328        return error;
 329}
 330
 331static bool rootid_owns_currentns(kuid_t kroot)
 332{
 333        struct user_namespace *ns;
 334
 335        if (!uid_valid(kroot))
 336                return false;
 337
 338        for (ns = current_user_ns(); ; ns = ns->parent) {
 339                if (from_kuid(ns, kroot) == 0)
 340                        return true;
 341                if (ns == &init_user_ns)
 342                        break;
 343        }
 344
 345        return false;
 346}
 347
 348static __u32 sansflags(__u32 m)
 349{
 350        return m & ~VFS_CAP_FLAGS_EFFECTIVE;
 351}
 352
 353static bool is_v2header(size_t size, const struct vfs_cap_data *cap)
 354{
 355        if (size != XATTR_CAPS_SZ_2)
 356                return false;
 357        return sansflags(le32_to_cpu(cap->magic_etc)) == VFS_CAP_REVISION_2;
 358}
 359
 360static bool is_v3header(size_t size, const struct vfs_cap_data *cap)
 361{
 362        if (size != XATTR_CAPS_SZ_3)
 363                return false;
 364        return sansflags(le32_to_cpu(cap->magic_etc)) == VFS_CAP_REVISION_3;
 365}
 366
 367/*
 368 * getsecurity: We are called for security.* before any attempt to read the
 369 * xattr from the inode itself.
 370 *
 371 * This gives us a chance to read the on-disk value and convert it.  If we
 372 * return -EOPNOTSUPP, then vfs_getxattr() will call the i_op handler.
 373 *
 374 * Note we are not called by vfs_getxattr_alloc(), but that is only called
 375 * by the integrity subsystem, which really wants the unconverted values -
 376 * so that's good.
 377 */
 378int cap_inode_getsecurity(struct user_namespace *mnt_userns,
 379                          struct inode *inode, const char *name, void **buffer,
 380                          bool alloc)
 381{
 382        int size, ret;
 383        kuid_t kroot;
 384        u32 nsmagic, magic;
 385        uid_t root, mappedroot;
 386        char *tmpbuf = NULL;
 387        struct vfs_cap_data *cap;
 388        struct vfs_ns_cap_data *nscap = NULL;
 389        struct dentry *dentry;
 390        struct user_namespace *fs_ns;
 391
 392        if (strcmp(name, "capability") != 0)
 393                return -EOPNOTSUPP;
 394
 395        dentry = d_find_any_alias(inode);
 396        if (!dentry)
 397                return -EINVAL;
 398
 399        size = sizeof(struct vfs_ns_cap_data);
 400        ret = (int)vfs_getxattr_alloc(mnt_userns, dentry, XATTR_NAME_CAPS,
 401                                      &tmpbuf, size, GFP_NOFS);
 402        dput(dentry);
 403
 404        if (ret < 0 || !tmpbuf)
 405                return ret;
 406
 407        fs_ns = inode->i_sb->s_user_ns;
 408        cap = (struct vfs_cap_data *) tmpbuf;
 409        if (is_v2header((size_t) ret, cap)) {
 410                root = 0;
 411        } else if (is_v3header((size_t) ret, cap)) {
 412                nscap = (struct vfs_ns_cap_data *) tmpbuf;
 413                root = le32_to_cpu(nscap->rootid);
 414        } else {
 415                size = -EINVAL;
 416                goto out_free;
 417        }
 418
 419        kroot = make_kuid(fs_ns, root);
 420
 421        /* If this is an idmapped mount shift the kuid. */
 422        kroot = mapped_kuid_fs(mnt_userns, fs_ns, kroot);
 423
 424        /* If the root kuid maps to a valid uid in current ns, then return
 425         * this as a nscap. */
 426        mappedroot = from_kuid(current_user_ns(), kroot);
 427        if (mappedroot != (uid_t)-1 && mappedroot != (uid_t)0) {
 428                size = sizeof(struct vfs_ns_cap_data);
 429                if (alloc) {
 430                        if (!nscap) {
 431                                /* v2 -> v3 conversion */
 432                                nscap = kzalloc(size, GFP_ATOMIC);
 433                                if (!nscap) {
 434                                        size = -ENOMEM;
 435                                        goto out_free;
 436                                }
 437                                nsmagic = VFS_CAP_REVISION_3;
 438                                magic = le32_to_cpu(cap->magic_etc);
 439                                if (magic & VFS_CAP_FLAGS_EFFECTIVE)
 440                                        nsmagic |= VFS_CAP_FLAGS_EFFECTIVE;
 441                                memcpy(&nscap->data, &cap->data, sizeof(__le32) * 2 * VFS_CAP_U32);
 442                                nscap->magic_etc = cpu_to_le32(nsmagic);
 443                        } else {
 444                                /* use allocated v3 buffer */
 445                                tmpbuf = NULL;
 446                        }
 447                        nscap->rootid = cpu_to_le32(mappedroot);
 448                        *buffer = nscap;
 449                }
 450                goto out_free;
 451        }
 452
 453        if (!rootid_owns_currentns(kroot)) {
 454                size = -EOVERFLOW;
 455                goto out_free;
 456        }
 457
 458        /* This comes from a parent namespace.  Return as a v2 capability */
 459        size = sizeof(struct vfs_cap_data);
 460        if (alloc) {
 461                if (nscap) {
 462                        /* v3 -> v2 conversion */
 463                        cap = kzalloc(size, GFP_ATOMIC);
 464                        if (!cap) {
 465                                size = -ENOMEM;
 466                                goto out_free;
 467                        }
 468                        magic = VFS_CAP_REVISION_2;
 469                        nsmagic = le32_to_cpu(nscap->magic_etc);
 470                        if (nsmagic & VFS_CAP_FLAGS_EFFECTIVE)
 471                                magic |= VFS_CAP_FLAGS_EFFECTIVE;
 472                        memcpy(&cap->data, &nscap->data, sizeof(__le32) * 2 * VFS_CAP_U32);
 473                        cap->magic_etc = cpu_to_le32(magic);
 474                } else {
 475                        /* use unconverted v2 */
 476                        tmpbuf = NULL;
 477                }
 478                *buffer = cap;
 479        }
 480out_free:
 481        kfree(tmpbuf);
 482        return size;
 483}
 484
 485/**
 486 * rootid_from_xattr - translate root uid of vfs caps
 487 *
 488 * @value:      vfs caps value which may be modified by this function
 489 * @size:       size of @ivalue
 490 * @task_ns:    user namespace of the caller
 491 * @mnt_userns: user namespace of the mount the inode was found from
 492 * @fs_userns:  user namespace of the filesystem
 493 *
 494 * If the inode has been found through an idmapped mount the user namespace of
 495 * the vfsmount must be passed through @mnt_userns. This function will then
 496 * take care to map the inode according to @mnt_userns before checking
 497 * permissions. On non-idmapped mounts or if permission checking is to be
 498 * performed on the raw inode simply passs init_user_ns.
 499 */
 500static kuid_t rootid_from_xattr(const void *value, size_t size,
 501                                struct user_namespace *task_ns,
 502                                struct user_namespace *mnt_userns,
 503                                struct user_namespace *fs_userns)
 504{
 505        const struct vfs_ns_cap_data *nscap = value;
 506        kuid_t rootkid;
 507        uid_t rootid = 0;
 508
 509        if (size == XATTR_CAPS_SZ_3)
 510                rootid = le32_to_cpu(nscap->rootid);
 511
 512        rootkid = make_kuid(task_ns, rootid);
 513        return mapped_kuid_user(mnt_userns, fs_userns, rootkid);
 514}
 515
 516static bool validheader(size_t size, const struct vfs_cap_data *cap)
 517{
 518        return is_v2header(size, cap) || is_v3header(size, cap);
 519}
 520
 521/**
 522 * cap_convert_nscap - check vfs caps
 523 *
 524 * @mnt_userns: user namespace of the mount the inode was found from
 525 * @dentry:     used to retrieve inode to check permissions on
 526 * @ivalue:     vfs caps value which may be modified by this function
 527 * @size:       size of @ivalue
 528 *
 529 * User requested a write of security.capability.  If needed, update the
 530 * xattr to change from v2 to v3, or to fixup the v3 rootid.
 531 *
 532 * If the inode has been found through an idmapped mount the user namespace of
 533 * the vfsmount must be passed through @mnt_userns. This function will then
 534 * take care to map the inode according to @mnt_userns before checking
 535 * permissions. On non-idmapped mounts or if permission checking is to be
 536 * performed on the raw inode simply passs init_user_ns.
 537 *
 538 * Return: On success, return the new size; on error, return < 0.
 539 */
 540int cap_convert_nscap(struct user_namespace *mnt_userns, struct dentry *dentry,
 541                      const void **ivalue, size_t size)
 542{
 543        struct vfs_ns_cap_data *nscap;
 544        uid_t nsrootid;
 545        const struct vfs_cap_data *cap = *ivalue;
 546        __u32 magic, nsmagic;
 547        struct inode *inode = d_backing_inode(dentry);
 548        struct user_namespace *task_ns = current_user_ns(),
 549                *fs_ns = inode->i_sb->s_user_ns;
 550        kuid_t rootid;
 551        size_t newsize;
 552
 553        if (!*ivalue)
 554                return -EINVAL;
 555        if (!validheader(size, cap))
 556                return -EINVAL;
 557        if (!capable_wrt_inode_uidgid(mnt_userns, inode, CAP_SETFCAP))
 558                return -EPERM;
 559        if (size == XATTR_CAPS_SZ_2 && (mnt_userns == fs_ns))
 560                if (ns_capable(inode->i_sb->s_user_ns, CAP_SETFCAP))
 561                        /* user is privileged, just write the v2 */
 562                        return size;
 563
 564        rootid = rootid_from_xattr(*ivalue, size, task_ns, mnt_userns, fs_ns);
 565        if (!uid_valid(rootid))
 566                return -EINVAL;
 567
 568        nsrootid = from_kuid(fs_ns, rootid);
 569        if (nsrootid == -1)
 570                return -EINVAL;
 571
 572        newsize = sizeof(struct vfs_ns_cap_data);
 573        nscap = kmalloc(newsize, GFP_ATOMIC);
 574        if (!nscap)
 575                return -ENOMEM;
 576        nscap->rootid = cpu_to_le32(nsrootid);
 577        nsmagic = VFS_CAP_REVISION_3;
 578        magic = le32_to_cpu(cap->magic_etc);
 579        if (magic & VFS_CAP_FLAGS_EFFECTIVE)
 580                nsmagic |= VFS_CAP_FLAGS_EFFECTIVE;
 581        nscap->magic_etc = cpu_to_le32(nsmagic);
 582        memcpy(&nscap->data, &cap->data, sizeof(__le32) * 2 * VFS_CAP_U32);
 583
 584        *ivalue = nscap;
 585        return newsize;
 586}
 587
 588/*
 589 * Calculate the new process capability sets from the capability sets attached
 590 * to a file.
 591 */
 592static inline int bprm_caps_from_vfs_caps(struct cpu_vfs_cap_data *caps,
 593                                          struct linux_binprm *bprm,
 594                                          bool *effective,
 595                                          bool *has_fcap)
 596{
 597        struct cred *new = bprm->cred;
 598        unsigned i;
 599        int ret = 0;
 600
 601        if (caps->magic_etc & VFS_CAP_FLAGS_EFFECTIVE)
 602                *effective = true;
 603
 604        if (caps->magic_etc & VFS_CAP_REVISION_MASK)
 605                *has_fcap = true;
 606
 607        CAP_FOR_EACH_U32(i) {
 608                __u32 permitted = caps->permitted.cap[i];
 609                __u32 inheritable = caps->inheritable.cap[i];
 610
 611                /*
 612                 * pP' = (X & fP) | (pI & fI)
 613                 * The addition of pA' is handled later.
 614                 */
 615                new->cap_permitted.cap[i] =
 616                        (new->cap_bset.cap[i] & permitted) |
 617                        (new->cap_inheritable.cap[i] & inheritable);
 618
 619                if (permitted & ~new->cap_permitted.cap[i])
 620                        /* insufficient to execute correctly */
 621                        ret = -EPERM;
 622        }
 623
 624        /*
 625         * For legacy apps, with no internal support for recognizing they
 626         * do not have enough capabilities, we return an error if they are
 627         * missing some "forced" (aka file-permitted) capabilities.
 628         */
 629        return *effective ? ret : 0;
 630}
 631
 632/**
 633 * get_vfs_caps_from_disk - retrieve vfs caps from disk
 634 *
 635 * @mnt_userns: user namespace of the mount the inode was found from
 636 * @dentry:     dentry from which @inode is retrieved
 637 * @cpu_caps:   vfs capabilities
 638 *
 639 * Extract the on-exec-apply capability sets for an executable file.
 640 *
 641 * If the inode has been found through an idmapped mount the user namespace of
 642 * the vfsmount must be passed through @mnt_userns. This function will then
 643 * take care to map the inode according to @mnt_userns before checking
 644 * permissions. On non-idmapped mounts or if permission checking is to be
 645 * performed on the raw inode simply passs init_user_ns.
 646 */
 647int get_vfs_caps_from_disk(struct user_namespace *mnt_userns,
 648                           const struct dentry *dentry,
 649                           struct cpu_vfs_cap_data *cpu_caps)
 650{
 651        struct inode *inode = d_backing_inode(dentry);
 652        __u32 magic_etc;
 653        unsigned tocopy, i;
 654        int size;
 655        struct vfs_ns_cap_data data, *nscaps = &data;
 656        struct vfs_cap_data *caps = (struct vfs_cap_data *) &data;
 657        kuid_t rootkuid;
 658        struct user_namespace *fs_ns;
 659
 660        memset(cpu_caps, 0, sizeof(struct cpu_vfs_cap_data));
 661
 662        if (!inode)
 663                return -ENODATA;
 664
 665        fs_ns = inode->i_sb->s_user_ns;
 666        size = __vfs_getxattr((struct dentry *)dentry, inode,
 667                              XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ);
 668        if (size == -ENODATA || size == -EOPNOTSUPP)
 669                /* no data, that's ok */
 670                return -ENODATA;
 671
 672        if (size < 0)
 673                return size;
 674
 675        if (size < sizeof(magic_etc))
 676                return -EINVAL;
 677
 678        cpu_caps->magic_etc = magic_etc = le32_to_cpu(caps->magic_etc);
 679
 680        rootkuid = make_kuid(fs_ns, 0);
 681        switch (magic_etc & VFS_CAP_REVISION_MASK) {
 682        case VFS_CAP_REVISION_1:
 683                if (size != XATTR_CAPS_SZ_1)
 684                        return -EINVAL;
 685                tocopy = VFS_CAP_U32_1;
 686                break;
 687        case VFS_CAP_REVISION_2:
 688                if (size != XATTR_CAPS_SZ_2)
 689                        return -EINVAL;
 690                tocopy = VFS_CAP_U32_2;
 691                break;
 692        case VFS_CAP_REVISION_3:
 693                if (size != XATTR_CAPS_SZ_3)
 694                        return -EINVAL;
 695                tocopy = VFS_CAP_U32_3;
 696                rootkuid = make_kuid(fs_ns, le32_to_cpu(nscaps->rootid));
 697                break;
 698
 699        default:
 700                return -EINVAL;
 701        }
 702        /* Limit the caps to the mounter of the filesystem
 703         * or the more limited uid specified in the xattr.
 704         */
 705        rootkuid = mapped_kuid_fs(mnt_userns, fs_ns, rootkuid);
 706        if (!rootid_owns_currentns(rootkuid))
 707                return -ENODATA;
 708
 709        CAP_FOR_EACH_U32(i) {
 710                if (i >= tocopy)
 711                        break;
 712                cpu_caps->permitted.cap[i] = le32_to_cpu(caps->data[i].permitted);
 713                cpu_caps->inheritable.cap[i] = le32_to_cpu(caps->data[i].inheritable);
 714        }
 715
 716        cpu_caps->permitted.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
 717        cpu_caps->inheritable.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
 718
 719        cpu_caps->rootid = rootkuid;
 720
 721        return 0;
 722}
 723
 724/*
 725 * Attempt to get the on-exec apply capability sets for an executable file from
 726 * its xattrs and, if present, apply them to the proposed credentials being
 727 * constructed by execve().
 728 */
 729static int get_file_caps(struct linux_binprm *bprm, struct file *file,
 730                         bool *effective, bool *has_fcap)
 731{
 732        int rc = 0;
 733        struct cpu_vfs_cap_data vcaps;
 734
 735        cap_clear(bprm->cred->cap_permitted);
 736
 737        if (!file_caps_enabled)
 738                return 0;
 739
 740        if (!mnt_may_suid(file->f_path.mnt))
 741                return 0;
 742
 743        /*
 744         * This check is redundant with mnt_may_suid() but is kept to make
 745         * explicit that capability bits are limited to s_user_ns and its
 746         * descendants.
 747         */
 748        if (!current_in_userns(file->f_path.mnt->mnt_sb->s_user_ns))
 749                return 0;
 750
 751        rc = get_vfs_caps_from_disk(file_mnt_user_ns(file),
 752                                    file->f_path.dentry, &vcaps);
 753        if (rc < 0) {
 754                if (rc == -EINVAL)
 755                        printk(KERN_NOTICE "Invalid argument reading file caps for %s\n",
 756                                        bprm->filename);
 757                else if (rc == -ENODATA)
 758                        rc = 0;
 759                goto out;
 760        }
 761
 762        rc = bprm_caps_from_vfs_caps(&vcaps, bprm, effective, has_fcap);
 763
 764out:
 765        if (rc)
 766                cap_clear(bprm->cred->cap_permitted);
 767
 768        return rc;
 769}
 770
 771static inline bool root_privileged(void) { return !issecure(SECURE_NOROOT); }
 772
 773static inline bool __is_real(kuid_t uid, struct cred *cred)
 774{ return uid_eq(cred->uid, uid); }
 775
 776static inline bool __is_eff(kuid_t uid, struct cred *cred)
 777{ return uid_eq(cred->euid, uid); }
 778
 779static inline bool __is_suid(kuid_t uid, struct cred *cred)
 780{ return !__is_real(uid, cred) && __is_eff(uid, cred); }
 781
 782/*
 783 * handle_privileged_root - Handle case of privileged root
 784 * @bprm: The execution parameters, including the proposed creds
 785 * @has_fcap: Are any file capabilities set?
 786 * @effective: Do we have effective root privilege?
 787 * @root_uid: This namespace' root UID WRT initial USER namespace
 788 *
 789 * Handle the case where root is privileged and hasn't been neutered by
 790 * SECURE_NOROOT.  If file capabilities are set, they won't be combined with
 791 * set UID root and nothing is changed.  If we are root, cap_permitted is
 792 * updated.  If we have become set UID root, the effective bit is set.
 793 */
 794static void handle_privileged_root(struct linux_binprm *bprm, bool has_fcap,
 795                                   bool *effective, kuid_t root_uid)
 796{
 797        const struct cred *old = current_cred();
 798        struct cred *new = bprm->cred;
 799
 800        if (!root_privileged())
 801                return;
 802        /*
 803         * If the legacy file capability is set, then don't set privs
 804         * for a setuid root binary run by a non-root user.  Do set it
 805         * for a root user just to cause least surprise to an admin.
 806         */
 807        if (has_fcap && __is_suid(root_uid, new)) {
 808                warn_setuid_and_fcaps_mixed(bprm->filename);
 809                return;
 810        }
 811        /*
 812         * To support inheritance of root-permissions and suid-root
 813         * executables under compatibility mode, we override the
 814         * capability sets for the file.
 815         */
 816        if (__is_eff(root_uid, new) || __is_real(root_uid, new)) {
 817                /* pP' = (cap_bset & ~0) | (pI & ~0) */
 818                new->cap_permitted = cap_combine(old->cap_bset,
 819                                                 old->cap_inheritable);
 820        }
 821        /*
 822         * If only the real uid is 0, we do not set the effective bit.
 823         */
 824        if (__is_eff(root_uid, new))
 825                *effective = true;
 826}
 827
 828#define __cap_gained(field, target, source) \
 829        !cap_issubset(target->cap_##field, source->cap_##field)
 830#define __cap_grew(target, source, cred) \
 831        !cap_issubset(cred->cap_##target, cred->cap_##source)
 832#define __cap_full(field, cred) \
 833        cap_issubset(CAP_FULL_SET, cred->cap_##field)
 834
 835static inline bool __is_setuid(struct cred *new, const struct cred *old)
 836{ return !uid_eq(new->euid, old->uid); }
 837
 838static inline bool __is_setgid(struct cred *new, const struct cred *old)
 839{ return !gid_eq(new->egid, old->gid); }
 840
 841/*
 842 * 1) Audit candidate if current->cap_effective is set
 843 *
 844 * We do not bother to audit if 3 things are true:
 845 *   1) cap_effective has all caps
 846 *   2) we became root *OR* are were already root
 847 *   3) root is supposed to have all caps (SECURE_NOROOT)
 848 * Since this is just a normal root execing a process.
 849 *
 850 * Number 1 above might fail if you don't have a full bset, but I think
 851 * that is interesting information to audit.
 852 *
 853 * A number of other conditions require logging:
 854 * 2) something prevented setuid root getting all caps
 855 * 3) non-setuid root gets fcaps
 856 * 4) non-setuid root gets ambient
 857 */
 858static inline bool nonroot_raised_pE(struct cred *new, const struct cred *old,
 859                                     kuid_t root, bool has_fcap)
 860{
 861        bool ret = false;
 862
 863        if ((__cap_grew(effective, ambient, new) &&
 864             !(__cap_full(effective, new) &&
 865               (__is_eff(root, new) || __is_real(root, new)) &&
 866               root_privileged())) ||
 867            (root_privileged() &&
 868             __is_suid(root, new) &&
 869             !__cap_full(effective, new)) ||
 870            (!__is_setuid(new, old) &&
 871             ((has_fcap &&
 872               __cap_gained(permitted, new, old)) ||
 873              __cap_gained(ambient, new, old))))
 874
 875                ret = true;
 876
 877        return ret;
 878}
 879
 880/**
 881 * cap_bprm_creds_from_file - Set up the proposed credentials for execve().
 882 * @bprm: The execution parameters, including the proposed creds
 883 * @file: The file to pull the credentials from
 884 *
 885 * Set up the proposed credentials for a new execution context being
 886 * constructed by execve().  The proposed creds in @bprm->cred is altered,
 887 * which won't take effect immediately.
 888 *
 889 * Return: 0 if successful, -ve on error.
 890 */
 891int cap_bprm_creds_from_file(struct linux_binprm *bprm, struct file *file)
 892{
 893        /* Process setpcap binaries and capabilities for uid 0 */
 894        const struct cred *old = current_cred();
 895        struct cred *new = bprm->cred;
 896        bool effective = false, has_fcap = false, is_setid;
 897        int ret;
 898        kuid_t root_uid;
 899
 900        if (WARN_ON(!cap_ambient_invariant_ok(old)))
 901                return -EPERM;
 902
 903        ret = get_file_caps(bprm, file, &effective, &has_fcap);
 904        if (ret < 0)
 905                return ret;
 906
 907        root_uid = make_kuid(new->user_ns, 0);
 908
 909        handle_privileged_root(bprm, has_fcap, &effective, root_uid);
 910
 911        /* if we have fs caps, clear dangerous personality flags */
 912        if (__cap_gained(permitted, new, old))
 913                bprm->per_clear |= PER_CLEAR_ON_SETID;
 914
 915        /* Don't let someone trace a set[ug]id/setpcap binary with the revised
 916         * credentials unless they have the appropriate permit.
 917         *
 918         * In addition, if NO_NEW_PRIVS, then ensure we get no new privs.
 919         */
 920        is_setid = __is_setuid(new, old) || __is_setgid(new, old);
 921
 922        if ((is_setid || __cap_gained(permitted, new, old)) &&
 923            ((bprm->unsafe & ~LSM_UNSAFE_PTRACE) ||
 924             !ptracer_capable(current, new->user_ns))) {
 925                /* downgrade; they get no more than they had, and maybe less */
 926                if (!ns_capable(new->user_ns, CAP_SETUID) ||
 927                    (bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS)) {
 928                        new->euid = new->uid;
 929                        new->egid = new->gid;
 930                }
 931                new->cap_permitted = cap_intersect(new->cap_permitted,
 932                                                   old->cap_permitted);
 933        }
 934
 935        new->suid = new->fsuid = new->euid;
 936        new->sgid = new->fsgid = new->egid;
 937
 938        /* File caps or setid cancels ambient. */
 939        if (has_fcap || is_setid)
 940                cap_clear(new->cap_ambient);
 941
 942        /*
 943         * Now that we've computed pA', update pP' to give:
 944         *   pP' = (X & fP) | (pI & fI) | pA'
 945         */
 946        new->cap_permitted = cap_combine(new->cap_permitted, new->cap_ambient);
 947
 948        /*
 949         * Set pE' = (fE ? pP' : pA').  Because pA' is zero if fE is set,
 950         * this is the same as pE' = (fE ? pP' : 0) | pA'.
 951         */
 952        if (effective)
 953                new->cap_effective = new->cap_permitted;
 954        else
 955                new->cap_effective = new->cap_ambient;
 956
 957        if (WARN_ON(!cap_ambient_invariant_ok(new)))
 958                return -EPERM;
 959
 960        if (nonroot_raised_pE(new, old, root_uid, has_fcap)) {
 961                ret = audit_log_bprm_fcaps(bprm, new, old);
 962                if (ret < 0)
 963                        return ret;
 964        }
 965
 966        new->securebits &= ~issecure_mask(SECURE_KEEP_CAPS);
 967
 968        if (WARN_ON(!cap_ambient_invariant_ok(new)))
 969                return -EPERM;
 970
 971        /* Check for privilege-elevated exec. */
 972        if (is_setid ||
 973            (!__is_real(root_uid, new) &&
 974             (effective ||
 975              __cap_grew(permitted, ambient, new))))
 976                bprm->secureexec = 1;
 977
 978        return 0;
 979}
 980
 981/**
 982 * cap_inode_setxattr - Determine whether an xattr may be altered
 983 * @dentry: The inode/dentry being altered
 984 * @name: The name of the xattr to be changed
 985 * @value: The value that the xattr will be changed to
 986 * @size: The size of value
 987 * @flags: The replacement flag
 988 *
 989 * Determine whether an xattr may be altered or set on an inode, returning 0 if
 990 * permission is granted, -ve if denied.
 991 *
 992 * This is used to make sure security xattrs don't get updated or set by those
 993 * who aren't privileged to do so.
 994 */
 995int cap_inode_setxattr(struct dentry *dentry, const char *name,
 996                       const void *value, size_t size, int flags)
 997{
 998        struct user_namespace *user_ns = dentry->d_sb->s_user_ns;
 999
1000        /* Ignore non-security xattrs */
1001        if (strncmp(name, XATTR_SECURITY_PREFIX,
1002                        XATTR_SECURITY_PREFIX_LEN) != 0)
1003                return 0;
1004
1005        /*
1006         * For XATTR_NAME_CAPS the check will be done in
1007         * cap_convert_nscap(), called by setxattr()
1008         */
1009        if (strcmp(name, XATTR_NAME_CAPS) == 0)
1010                return 0;
1011
1012        if (!ns_capable(user_ns, CAP_SYS_ADMIN))
1013                return -EPERM;
1014        return 0;
1015}
1016
1017/**
1018 * cap_inode_removexattr - Determine whether an xattr may be removed
1019 *
1020 * @mnt_userns: User namespace of the mount the inode was found from
1021 * @dentry:     The inode/dentry being altered
1022 * @name:       The name of the xattr to be changed
1023 *
1024 * Determine whether an xattr may be removed from an inode, returning 0 if
1025 * permission is granted, -ve if denied.
1026 *
1027 * If the inode has been found through an idmapped mount the user namespace of
1028 * the vfsmount must be passed through @mnt_userns. This function will then
1029 * take care to map the inode according to @mnt_userns before checking
1030 * permissions. On non-idmapped mounts or if permission checking is to be
1031 * performed on the raw inode simply passs init_user_ns.
1032 *
1033 * This is used to make sure security xattrs don't get removed by those who
1034 * aren't privileged to remove them.
1035 */
1036int cap_inode_removexattr(struct user_namespace *mnt_userns,
1037                          struct dentry *dentry, const char *name)
1038{
1039        struct user_namespace *user_ns = dentry->d_sb->s_user_ns;
1040
1041        /* Ignore non-security xattrs */
1042        if (strncmp(name, XATTR_SECURITY_PREFIX,
1043                        XATTR_SECURITY_PREFIX_LEN) != 0)
1044                return 0;
1045
1046        if (strcmp(name, XATTR_NAME_CAPS) == 0) {
1047                /* security.capability gets namespaced */
1048                struct inode *inode = d_backing_inode(dentry);
1049                if (!inode)
1050                        return -EINVAL;
1051                if (!capable_wrt_inode_uidgid(mnt_userns, inode, CAP_SETFCAP))
1052                        return -EPERM;
1053                return 0;
1054        }
1055
1056        if (!ns_capable(user_ns, CAP_SYS_ADMIN))
1057                return -EPERM;
1058        return 0;
1059}
1060
1061/*
1062 * cap_emulate_setxuid() fixes the effective / permitted capabilities of
1063 * a process after a call to setuid, setreuid, or setresuid.
1064 *
1065 *  1) When set*uiding _from_ one of {r,e,s}uid == 0 _to_ all of
1066 *  {r,e,s}uid != 0, the permitted and effective capabilities are
1067 *  cleared.
1068 *
1069 *  2) When set*uiding _from_ euid == 0 _to_ euid != 0, the effective
1070 *  capabilities of the process are cleared.
1071 *
1072 *  3) When set*uiding _from_ euid != 0 _to_ euid == 0, the effective
1073 *  capabilities are set to the permitted capabilities.
1074 *
1075 *  fsuid is handled elsewhere. fsuid == 0 and {r,e,s}uid!= 0 should
1076 *  never happen.
1077 *
1078 *  -astor
1079 *
1080 * cevans - New behaviour, Oct '99
1081 * A process may, via prctl(), elect to keep its capabilities when it
1082 * calls setuid() and switches away from uid==0. Both permitted and
1083 * effective sets will be retained.
1084 * Without this change, it was impossible for a daemon to drop only some
1085 * of its privilege. The call to setuid(!=0) would drop all privileges!
1086 * Keeping uid 0 is not an option because uid 0 owns too many vital
1087 * files..
1088 * Thanks to Olaf Kirch and Peter Benie for spotting this.
1089 */
1090static inline void cap_emulate_setxuid(struct cred *new, const struct cred *old)
1091{
1092        kuid_t root_uid = make_kuid(old->user_ns, 0);
1093
1094        if ((uid_eq(old->uid, root_uid) ||
1095             uid_eq(old->euid, root_uid) ||
1096             uid_eq(old->suid, root_uid)) &&
1097            (!uid_eq(new->uid, root_uid) &&
1098             !uid_eq(new->euid, root_uid) &&
1099             !uid_eq(new->suid, root_uid))) {
1100                if (!issecure(SECURE_KEEP_CAPS)) {
1101                        cap_clear(new->cap_permitted);
1102                        cap_clear(new->cap_effective);
1103                }
1104
1105                /*
1106                 * Pre-ambient programs expect setresuid to nonroot followed
1107                 * by exec to drop capabilities.  We should make sure that
1108                 * this remains the case.
1109                 */
1110                cap_clear(new->cap_ambient);
1111        }
1112        if (uid_eq(old->euid, root_uid) && !uid_eq(new->euid, root_uid))
1113                cap_clear(new->cap_effective);
1114        if (!uid_eq(old->euid, root_uid) && uid_eq(new->euid, root_uid))
1115                new->cap_effective = new->cap_permitted;
1116}
1117
1118/**
1119 * cap_task_fix_setuid - Fix up the results of setuid() call
1120 * @new: The proposed credentials
1121 * @old: The current task's current credentials
1122 * @flags: Indications of what has changed
1123 *
1124 * Fix up the results of setuid() call before the credential changes are
1125 * actually applied.
1126 *
1127 * Return: 0 to grant the changes, -ve to deny them.
1128 */
1129int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags)
1130{
1131        switch (flags) {
1132        case LSM_SETID_RE:
1133        case LSM_SETID_ID:
1134        case LSM_SETID_RES:
1135                /* juggle the capabilities to follow [RES]UID changes unless
1136                 * otherwise suppressed */
1137                if (!issecure(SECURE_NO_SETUID_FIXUP))
1138                        cap_emulate_setxuid(new, old);
1139                break;
1140
1141        case LSM_SETID_FS:
1142                /* juggle the capabilties to follow FSUID changes, unless
1143                 * otherwise suppressed
1144                 *
1145                 * FIXME - is fsuser used for all CAP_FS_MASK capabilities?
1146                 *          if not, we might be a bit too harsh here.
1147                 */
1148                if (!issecure(SECURE_NO_SETUID_FIXUP)) {
1149                        kuid_t root_uid = make_kuid(old->user_ns, 0);
1150                        if (uid_eq(old->fsuid, root_uid) && !uid_eq(new->fsuid, root_uid))
1151                                new->cap_effective =
1152                                        cap_drop_fs_set(new->cap_effective);
1153
1154                        if (!uid_eq(old->fsuid, root_uid) && uid_eq(new->fsuid, root_uid))
1155                                new->cap_effective =
1156                                        cap_raise_fs_set(new->cap_effective,
1157                                                         new->cap_permitted);
1158                }
1159                break;
1160
1161        default:
1162                return -EINVAL;
1163        }
1164
1165        return 0;
1166}
1167
1168/*
1169 * Rationale: code calling task_setscheduler, task_setioprio, and
1170 * task_setnice, assumes that
1171 *   . if capable(cap_sys_nice), then those actions should be allowed
1172 *   . if not capable(cap_sys_nice), but acting on your own processes,
1173 *      then those actions should be allowed
1174 * This is insufficient now since you can call code without suid, but
1175 * yet with increased caps.
1176 * So we check for increased caps on the target process.
1177 */
1178static int cap_safe_nice(struct task_struct *p)
1179{
1180        int is_subset, ret = 0;
1181
1182        rcu_read_lock();
1183        is_subset = cap_issubset(__task_cred(p)->cap_permitted,
1184                                 current_cred()->cap_permitted);
1185        if (!is_subset && !ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE))
1186                ret = -EPERM;
1187        rcu_read_unlock();
1188
1189        return ret;
1190}
1191
1192/**
1193 * cap_task_setscheduler - Detemine if scheduler policy change is permitted
1194 * @p: The task to affect
1195 *
1196 * Detemine if the requested scheduler policy change is permitted for the
1197 * specified task.
1198 *
1199 * Return: 0 if permission is granted, -ve if denied.
1200 */
1201int cap_task_setscheduler(struct task_struct *p)
1202{
1203        return cap_safe_nice(p);
1204}
1205
1206/**
1207 * cap_task_setioprio - Detemine if I/O priority change is permitted
1208 * @p: The task to affect
1209 * @ioprio: The I/O priority to set
1210 *
1211 * Detemine if the requested I/O priority change is permitted for the specified
1212 * task.
1213 *
1214 * Return: 0 if permission is granted, -ve if denied.
1215 */
1216int cap_task_setioprio(struct task_struct *p, int ioprio)
1217{
1218        return cap_safe_nice(p);
1219}
1220
1221/**
1222 * cap_task_setnice - Detemine if task priority change is permitted
1223 * @p: The task to affect
1224 * @nice: The nice value to set
1225 *
1226 * Detemine if the requested task priority change is permitted for the
1227 * specified task.
1228 *
1229 * Return: 0 if permission is granted, -ve if denied.
1230 */
1231int cap_task_setnice(struct task_struct *p, int nice)
1232{
1233        return cap_safe_nice(p);
1234}
1235
1236/*
1237 * Implement PR_CAPBSET_DROP.  Attempt to remove the specified capability from
1238 * the current task's bounding set.  Returns 0 on success, -ve on error.
1239 */
1240static int cap_prctl_drop(unsigned long cap)
1241{
1242        struct cred *new;
1243
1244        if (!ns_capable(current_user_ns(), CAP_SETPCAP))
1245                return -EPERM;
1246        if (!cap_valid(cap))
1247                return -EINVAL;
1248
1249        new = prepare_creds();
1250        if (!new)
1251                return -ENOMEM;
1252        cap_lower(new->cap_bset, cap);
1253        return commit_creds(new);
1254}
1255
1256/**
1257 * cap_task_prctl - Implement process control functions for this security module
1258 * @option: The process control function requested
1259 * @arg2: The argument data for this function
1260 * @arg3: The argument data for this function
1261 * @arg4: The argument data for this function
1262 * @arg5: The argument data for this function
1263 *
1264 * Allow process control functions (sys_prctl()) to alter capabilities; may
1265 * also deny access to other functions not otherwise implemented here.
1266 *
1267 * Return: 0 or +ve on success, -ENOSYS if this function is not implemented
1268 * here, other -ve on error.  If -ENOSYS is returned, sys_prctl() and other LSM
1269 * modules will consider performing the function.
1270 */
1271int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
1272                   unsigned long arg4, unsigned long arg5)
1273{
1274        const struct cred *old = current_cred();
1275        struct cred *new;
1276
1277        switch (option) {
1278        case PR_CAPBSET_READ:
1279                if (!cap_valid(arg2))
1280                        return -EINVAL;
1281                return !!cap_raised(old->cap_bset, arg2);
1282
1283        case PR_CAPBSET_DROP:
1284                return cap_prctl_drop(arg2);
1285
1286        /*
1287         * The next four prctl's remain to assist with transitioning a
1288         * system from legacy UID=0 based privilege (when filesystem
1289         * capabilities are not in use) to a system using filesystem
1290         * capabilities only - as the POSIX.1e draft intended.
1291         *
1292         * Note:
1293         *
1294         *  PR_SET_SECUREBITS =
1295         *      issecure_mask(SECURE_KEEP_CAPS_LOCKED)
1296         *    | issecure_mask(SECURE_NOROOT)
1297         *    | issecure_mask(SECURE_NOROOT_LOCKED)
1298         *    | issecure_mask(SECURE_NO_SETUID_FIXUP)
1299         *    | issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED)
1300         *
1301         * will ensure that the current process and all of its
1302         * children will be locked into a pure
1303         * capability-based-privilege environment.
1304         */
1305        case PR_SET_SECUREBITS:
1306                if ((((old->securebits & SECURE_ALL_LOCKS) >> 1)
1307                     & (old->securebits ^ arg2))                        /*[1]*/
1308                    || ((old->securebits & SECURE_ALL_LOCKS & ~arg2))   /*[2]*/
1309                    || (arg2 & ~(SECURE_ALL_LOCKS | SECURE_ALL_BITS))   /*[3]*/
1310                    || (cap_capable(current_cred(),
1311                                    current_cred()->user_ns,
1312                                    CAP_SETPCAP,
1313                                    CAP_OPT_NONE) != 0)                 /*[4]*/
1314                        /*
1315                         * [1] no changing of bits that are locked
1316                         * [2] no unlocking of locks
1317                         * [3] no setting of unsupported bits
1318                         * [4] doing anything requires privilege (go read about
1319                         *     the "sendmail capabilities bug")
1320                         */
1321                    )
1322                        /* cannot change a locked bit */
1323                        return -EPERM;
1324
1325                new = prepare_creds();
1326                if (!new)
1327                        return -ENOMEM;
1328                new->securebits = arg2;
1329                return commit_creds(new);
1330
1331        case PR_GET_SECUREBITS:
1332                return old->securebits;
1333
1334        case PR_GET_KEEPCAPS:
1335                return !!issecure(SECURE_KEEP_CAPS);
1336
1337        case PR_SET_KEEPCAPS:
1338                if (arg2 > 1) /* Note, we rely on arg2 being unsigned here */
1339                        return -EINVAL;
1340                if (issecure(SECURE_KEEP_CAPS_LOCKED))
1341                        return -EPERM;
1342
1343                new = prepare_creds();
1344                if (!new)
1345                        return -ENOMEM;
1346                if (arg2)
1347                        new->securebits |= issecure_mask(SECURE_KEEP_CAPS);
1348                else
1349                        new->securebits &= ~issecure_mask(SECURE_KEEP_CAPS);
1350                return commit_creds(new);
1351
1352        case PR_CAP_AMBIENT:
1353                if (arg2 == PR_CAP_AMBIENT_CLEAR_ALL) {
1354                        if (arg3 | arg4 | arg5)
1355                                return -EINVAL;
1356
1357                        new = prepare_creds();
1358                        if (!new)
1359                                return -ENOMEM;
1360                        cap_clear(new->cap_ambient);
1361                        return commit_creds(new);
1362                }
1363
1364                if (((!cap_valid(arg3)) | arg4 | arg5))
1365                        return -EINVAL;
1366
1367                if (arg2 == PR_CAP_AMBIENT_IS_SET) {
1368                        return !!cap_raised(current_cred()->cap_ambient, arg3);
1369                } else if (arg2 != PR_CAP_AMBIENT_RAISE &&
1370                           arg2 != PR_CAP_AMBIENT_LOWER) {
1371                        return -EINVAL;
1372                } else {
1373                        if (arg2 == PR_CAP_AMBIENT_RAISE &&
1374                            (!cap_raised(current_cred()->cap_permitted, arg3) ||
1375                             !cap_raised(current_cred()->cap_inheritable,
1376                                         arg3) ||
1377                             issecure(SECURE_NO_CAP_AMBIENT_RAISE)))
1378                                return -EPERM;
1379
1380                        new = prepare_creds();
1381                        if (!new)
1382                                return -ENOMEM;
1383                        if (arg2 == PR_CAP_AMBIENT_RAISE)
1384                                cap_raise(new->cap_ambient, arg3);
1385                        else
1386                                cap_lower(new->cap_ambient, arg3);
1387                        return commit_creds(new);
1388                }
1389
1390        default:
1391                /* No functionality available - continue with default */
1392                return -ENOSYS;
1393        }
1394}
1395
1396/**
1397 * cap_vm_enough_memory - Determine whether a new virtual mapping is permitted
1398 * @mm: The VM space in which the new mapping is to be made
1399 * @pages: The size of the mapping
1400 *
1401 * Determine whether the allocation of a new virtual mapping by the current
1402 * task is permitted.
1403 *
1404 * Return: 1 if permission is granted, 0 if not.
1405 */
1406int cap_vm_enough_memory(struct mm_struct *mm, long pages)
1407{
1408        int cap_sys_admin = 0;
1409
1410        if (cap_capable(current_cred(), &init_user_ns,
1411                                CAP_SYS_ADMIN, CAP_OPT_NOAUDIT) == 0)
1412                cap_sys_admin = 1;
1413
1414        return cap_sys_admin;
1415}
1416
1417/**
1418 * cap_mmap_addr - check if able to map given addr
1419 * @addr: address attempting to be mapped
1420 *
1421 * If the process is attempting to map memory below dac_mmap_min_addr they need
1422 * CAP_SYS_RAWIO.  The other parameters to this function are unused by the
1423 * capability security module.
1424 *
1425 * Return: 0 if this mapping should be allowed or -EPERM if not.
1426 */
1427int cap_mmap_addr(unsigned long addr)
1428{
1429        int ret = 0;
1430
1431        if (addr < dac_mmap_min_addr) {
1432                ret = cap_capable(current_cred(), &init_user_ns, CAP_SYS_RAWIO,
1433                                  CAP_OPT_NONE);
1434                /* set PF_SUPERPRIV if it turns out we allow the low mmap */
1435                if (ret == 0)
1436                        current->flags |= PF_SUPERPRIV;
1437        }
1438        return ret;
1439}
1440
1441int cap_mmap_file(struct file *file, unsigned long reqprot,
1442                  unsigned long prot, unsigned long flags)
1443{
1444        return 0;
1445}
1446
1447#ifdef CONFIG_SECURITY
1448
1449static struct security_hook_list capability_hooks[] __lsm_ro_after_init = {
1450        LSM_HOOK_INIT(capable, cap_capable),
1451        LSM_HOOK_INIT(settime, cap_settime),
1452        LSM_HOOK_INIT(ptrace_access_check, cap_ptrace_access_check),
1453        LSM_HOOK_INIT(ptrace_traceme, cap_ptrace_traceme),
1454        LSM_HOOK_INIT(capget, cap_capget),
1455        LSM_HOOK_INIT(capset, cap_capset),
1456        LSM_HOOK_INIT(bprm_creds_from_file, cap_bprm_creds_from_file),
1457        LSM_HOOK_INIT(inode_need_killpriv, cap_inode_need_killpriv),
1458        LSM_HOOK_INIT(inode_killpriv, cap_inode_killpriv),
1459        LSM_HOOK_INIT(inode_getsecurity, cap_inode_getsecurity),
1460        LSM_HOOK_INIT(mmap_addr, cap_mmap_addr),
1461        LSM_HOOK_INIT(mmap_file, cap_mmap_file),
1462        LSM_HOOK_INIT(task_fix_setuid, cap_task_fix_setuid),
1463        LSM_HOOK_INIT(task_prctl, cap_task_prctl),
1464        LSM_HOOK_INIT(task_setscheduler, cap_task_setscheduler),
1465        LSM_HOOK_INIT(task_setioprio, cap_task_setioprio),
1466        LSM_HOOK_INIT(task_setnice, cap_task_setnice),
1467        LSM_HOOK_INIT(vm_enough_memory, cap_vm_enough_memory),
1468};
1469
1470static int __init capability_init(void)
1471{
1472        security_add_hooks(capability_hooks, ARRAY_SIZE(capability_hooks),
1473                                "capability");
1474        return 0;
1475}
1476
1477DEFINE_LSM(capability) = {
1478        .name = "capability",
1479        .order = LSM_ORDER_FIRST,
1480        .init = capability_init,
1481};
1482
1483#endif /* CONFIG_SECURITY */
1484