linux/fs/attr.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *  linux/fs/attr.c
   4 *
   5 *  Copyright (C) 1991, 1992  Linus Torvalds
   6 *  changes by Thomas Schoebel-Theuer
   7 */
   8
   9#include <linux/export.h>
  10#include <linux/time.h>
  11#include <linux/mm.h>
  12#include <linux/string.h>
  13#include <linux/sched/signal.h>
  14#include <linux/capability.h>
  15#include <linux/fsnotify.h>
  16#include <linux/fcntl.h>
  17#include <linux/security.h>
  18#include <linux/evm.h>
  19#include <linux/ima.h>
  20
  21static bool chown_ok(const struct inode *inode, kuid_t uid)
  22{
  23        if (uid_eq(current_fsuid(), inode->i_uid) &&
  24            uid_eq(uid, inode->i_uid))
  25                return true;
  26        if (capable_wrt_inode_uidgid(inode, CAP_CHOWN))
  27                return true;
  28        if (uid_eq(inode->i_uid, INVALID_UID) &&
  29            ns_capable(inode->i_sb->s_user_ns, CAP_CHOWN))
  30                return true;
  31        return false;
  32}
  33
  34static bool chgrp_ok(const struct inode *inode, kgid_t gid)
  35{
  36        if (uid_eq(current_fsuid(), inode->i_uid) &&
  37            (in_group_p(gid) || gid_eq(gid, inode->i_gid)))
  38                return true;
  39        if (capable_wrt_inode_uidgid(inode, CAP_CHOWN))
  40                return true;
  41        if (gid_eq(inode->i_gid, INVALID_GID) &&
  42            ns_capable(inode->i_sb->s_user_ns, CAP_CHOWN))
  43                return true;
  44        return false;
  45}
  46
  47/**
  48 * setattr_prepare - check if attribute changes to a dentry are allowed
  49 * @dentry:     dentry to check
  50 * @attr:       attributes to change
  51 *
  52 * Check if we are allowed to change the attributes contained in @attr
  53 * in the given dentry.  This includes the normal unix access permission
  54 * checks, as well as checks for rlimits and others. The function also clears
  55 * SGID bit from mode if user is not allowed to set it. Also file capabilities
  56 * and IMA extended attributes are cleared if ATTR_KILL_PRIV is set.
  57 *
  58 * Should be called as the first thing in ->setattr implementations,
  59 * possibly after taking additional locks.
  60 */
  61int setattr_prepare(struct dentry *dentry, struct iattr *attr)
  62{
  63        struct inode *inode = d_inode(dentry);
  64        unsigned int ia_valid = attr->ia_valid;
  65
  66        /*
  67         * First check size constraints.  These can't be overriden using
  68         * ATTR_FORCE.
  69         */
  70        if (ia_valid & ATTR_SIZE) {
  71                int error = inode_newsize_ok(inode, attr->ia_size);
  72                if (error)
  73                        return error;
  74        }
  75
  76        /* If force is set do it anyway. */
  77        if (ia_valid & ATTR_FORCE)
  78                goto kill_priv;
  79
  80        /* Make sure a caller can chown. */
  81        if ((ia_valid & ATTR_UID) && !chown_ok(inode, attr->ia_uid))
  82                return -EPERM;
  83
  84        /* Make sure caller can chgrp. */
  85        if ((ia_valid & ATTR_GID) && !chgrp_ok(inode, attr->ia_gid))
  86                return -EPERM;
  87
  88        /* Make sure a caller can chmod. */
  89        if (ia_valid & ATTR_MODE) {
  90                if (!inode_owner_or_capable(inode))
  91                        return -EPERM;
  92                /* Also check the setgid bit! */
  93                if (!in_group_p((ia_valid & ATTR_GID) ? attr->ia_gid :
  94                                inode->i_gid) &&
  95                    !capable_wrt_inode_uidgid(inode, CAP_FSETID))
  96                        attr->ia_mode &= ~S_ISGID;
  97        }
  98
  99        /* Check for setting the inode time. */
 100        if (ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)) {
 101                if (!inode_owner_or_capable(inode))
 102                        return -EPERM;
 103        }
 104
 105kill_priv:
 106        /* User has permission for the change */
 107        if (ia_valid & ATTR_KILL_PRIV) {
 108                int error;
 109
 110                error = security_inode_killpriv(dentry);
 111                if (error)
 112                        return error;
 113        }
 114
 115        return 0;
 116}
 117EXPORT_SYMBOL(setattr_prepare);
 118
 119/**
 120 * inode_newsize_ok - may this inode be truncated to a given size
 121 * @inode:      the inode to be truncated
 122 * @offset:     the new size to assign to the inode
 123 *
 124 * inode_newsize_ok must be called with i_mutex held.
 125 *
 126 * inode_newsize_ok will check filesystem limits and ulimits to check that the
 127 * new inode size is within limits. inode_newsize_ok will also send SIGXFSZ
 128 * when necessary. Caller must not proceed with inode size change if failure is
 129 * returned. @inode must be a file (not directory), with appropriate
 130 * permissions to allow truncate (inode_newsize_ok does NOT check these
 131 * conditions).
 132 *
 133 * Return: 0 on success, -ve errno on failure
 134 */
 135int inode_newsize_ok(const struct inode *inode, loff_t offset)
 136{
 137        if (inode->i_size < offset) {
 138                unsigned long limit;
 139
 140                limit = rlimit(RLIMIT_FSIZE);
 141                if (limit != RLIM_INFINITY && offset > limit)
 142                        goto out_sig;
 143                if (offset > inode->i_sb->s_maxbytes)
 144                        goto out_big;
 145        } else {
 146                /*
 147                 * truncation of in-use swapfiles is disallowed - it would
 148                 * cause subsequent swapout to scribble on the now-freed
 149                 * blocks.
 150                 */
 151                if (IS_SWAPFILE(inode))
 152                        return -ETXTBSY;
 153        }
 154
 155        return 0;
 156out_sig:
 157        send_sig(SIGXFSZ, current, 0);
 158out_big:
 159        return -EFBIG;
 160}
 161EXPORT_SYMBOL(inode_newsize_ok);
 162
 163/**
 164 * setattr_copy - copy simple metadata updates into the generic inode
 165 * @inode:      the inode to be updated
 166 * @attr:       the new attributes
 167 *
 168 * setattr_copy must be called with i_mutex held.
 169 *
 170 * setattr_copy updates the inode's metadata with that specified
 171 * in attr. Noticeably missing is inode size update, which is more complex
 172 * as it requires pagecache updates.
 173 *
 174 * The inode is not marked as dirty after this operation. The rationale is
 175 * that for "simple" filesystems, the struct inode is the inode storage.
 176 * The caller is free to mark the inode dirty afterwards if needed.
 177 */
 178void setattr_copy(struct inode *inode, const struct iattr *attr)
 179{
 180        unsigned int ia_valid = attr->ia_valid;
 181
 182        if (ia_valid & ATTR_UID)
 183                inode->i_uid = attr->ia_uid;
 184        if (ia_valid & ATTR_GID)
 185                inode->i_gid = attr->ia_gid;
 186        if (ia_valid & ATTR_ATIME)
 187                inode->i_atime = timespec64_trunc(attr->ia_atime,
 188                                                  inode->i_sb->s_time_gran);
 189        if (ia_valid & ATTR_MTIME)
 190                inode->i_mtime = timespec64_trunc(attr->ia_mtime,
 191                                                  inode->i_sb->s_time_gran);
 192        if (ia_valid & ATTR_CTIME)
 193                inode->i_ctime = timespec64_trunc(attr->ia_ctime,
 194                                                  inode->i_sb->s_time_gran);
 195        if (ia_valid & ATTR_MODE) {
 196                umode_t mode = attr->ia_mode;
 197
 198                if (!in_group_p(inode->i_gid) &&
 199                    !capable_wrt_inode_uidgid(inode, CAP_FSETID))
 200                        mode &= ~S_ISGID;
 201                inode->i_mode = mode;
 202        }
 203}
 204EXPORT_SYMBOL(setattr_copy);
 205
 206/**
 207 * notify_change - modify attributes of a filesytem object
 208 * @dentry:     object affected
 209 * @attr:       new attributes
 210 * @delegated_inode: returns inode, if the inode is delegated
 211 *
 212 * The caller must hold the i_mutex on the affected object.
 213 *
 214 * If notify_change discovers a delegation in need of breaking,
 215 * it will return -EWOULDBLOCK and return a reference to the inode in
 216 * delegated_inode.  The caller should then break the delegation and
 217 * retry.  Because breaking a delegation may take a long time, the
 218 * caller should drop the i_mutex before doing so.
 219 *
 220 * Alternatively, a caller may pass NULL for delegated_inode.  This may
 221 * be appropriate for callers that expect the underlying filesystem not
 222 * to be NFS exported.  Also, passing NULL is fine for callers holding
 223 * the file open for write, as there can be no conflicting delegation in
 224 * that case.
 225 */
 226int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode)
 227{
 228        struct inode *inode = dentry->d_inode;
 229        umode_t mode = inode->i_mode;
 230        int error;
 231        struct timespec64 now;
 232        unsigned int ia_valid = attr->ia_valid;
 233
 234        WARN_ON_ONCE(!inode_is_locked(inode));
 235
 236        if (ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_TIMES_SET)) {
 237                if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
 238                        return -EPERM;
 239        }
 240
 241        /*
 242         * If utimes(2) and friends are called with times == NULL (or both
 243         * times are UTIME_NOW), then we need to check for write permission
 244         */
 245        if (ia_valid & ATTR_TOUCH) {
 246                if (IS_IMMUTABLE(inode))
 247                        return -EPERM;
 248
 249                if (!inode_owner_or_capable(inode)) {
 250                        error = inode_permission(inode, MAY_WRITE);
 251                        if (error)
 252                                return error;
 253                }
 254        }
 255
 256        if ((ia_valid & ATTR_MODE)) {
 257                umode_t amode = attr->ia_mode;
 258                /* Flag setting protected by i_mutex */
 259                if (is_sxid(amode))
 260                        inode->i_flags &= ~S_NOSEC;
 261        }
 262
 263        now = current_time(inode);
 264
 265        attr->ia_ctime = now;
 266        if (!(ia_valid & ATTR_ATIME_SET))
 267                attr->ia_atime = now;
 268        if (!(ia_valid & ATTR_MTIME_SET))
 269                attr->ia_mtime = now;
 270        if (ia_valid & ATTR_KILL_PRIV) {
 271                error = security_inode_need_killpriv(dentry);
 272                if (error < 0)
 273                        return error;
 274                if (error == 0)
 275                        ia_valid = attr->ia_valid &= ~ATTR_KILL_PRIV;
 276        }
 277
 278        /*
 279         * We now pass ATTR_KILL_S*ID to the lower level setattr function so
 280         * that the function has the ability to reinterpret a mode change
 281         * that's due to these bits. This adds an implicit restriction that
 282         * no function will ever call notify_change with both ATTR_MODE and
 283         * ATTR_KILL_S*ID set.
 284         */
 285        if ((ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) &&
 286            (ia_valid & ATTR_MODE))
 287                BUG();
 288
 289        if (ia_valid & ATTR_KILL_SUID) {
 290                if (mode & S_ISUID) {
 291                        ia_valid = attr->ia_valid |= ATTR_MODE;
 292                        attr->ia_mode = (inode->i_mode & ~S_ISUID);
 293                }
 294        }
 295        if (ia_valid & ATTR_KILL_SGID) {
 296                if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
 297                        if (!(ia_valid & ATTR_MODE)) {
 298                                ia_valid = attr->ia_valid |= ATTR_MODE;
 299                                attr->ia_mode = inode->i_mode;
 300                        }
 301                        attr->ia_mode &= ~S_ISGID;
 302                }
 303        }
 304        if (!(attr->ia_valid & ~(ATTR_KILL_SUID | ATTR_KILL_SGID)))
 305                return 0;
 306
 307        /*
 308         * Verify that uid/gid changes are valid in the target
 309         * namespace of the superblock.
 310         */
 311        if (ia_valid & ATTR_UID &&
 312            !kuid_has_mapping(inode->i_sb->s_user_ns, attr->ia_uid))
 313                return -EOVERFLOW;
 314        if (ia_valid & ATTR_GID &&
 315            !kgid_has_mapping(inode->i_sb->s_user_ns, attr->ia_gid))
 316                return -EOVERFLOW;
 317
 318        /* Don't allow modifications of files with invalid uids or
 319         * gids unless those uids & gids are being made valid.
 320         */
 321        if (!(ia_valid & ATTR_UID) && !uid_valid(inode->i_uid))
 322                return -EOVERFLOW;
 323        if (!(ia_valid & ATTR_GID) && !gid_valid(inode->i_gid))
 324                return -EOVERFLOW;
 325
 326        error = security_inode_setattr(dentry, attr);
 327        if (error)
 328                return error;
 329        error = try_break_deleg(inode, delegated_inode);
 330        if (error)
 331                return error;
 332
 333        if (inode->i_op->setattr)
 334                error = inode->i_op->setattr(dentry, attr);
 335        else
 336                error = simple_setattr(dentry, attr);
 337
 338        if (!error) {
 339                fsnotify_change(dentry, ia_valid);
 340                ima_inode_post_setattr(dentry);
 341                evm_inode_post_setattr(dentry, ia_valid);
 342        }
 343
 344        return error;
 345}
 346EXPORT_SYMBOL(notify_change);
 347