On Tue 01-09-26 14:14:30, Christian Brauner wrote:
> Convert to const struct mnt_idmap.
> 
> A mount's idmapping is immutable. The only thing that is allowed to be
> modified afterwards is the reference count and that is hidden behind
> mnt_idmap_get() and mnt_idmap_put(). Everything else only ever reads
> from the idmapping. This is the same model that struct cred uses and the
> idmapping is also rather sensitive.
> 
> So make the idmap argument const wherever we can. The conversion is done
> from the bottom up so callers can continue to pass a non-const pointer
> to a const parameter until the conversion is finished.
> 
> No functional changes.
> 
> Signed-off-by: Christian Brauner (Amutable) <[email protected]>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <[email protected]>

                                                                Honza

> ---
>  fs/exfat/file.c                       |  2 +-
>  fs/fat/file.c                         |  2 +-
>  fs/internal.h                         |  2 +-
>  fs/namei.c                            |  2 +-
>  fs/smb/server/ndr.c                   |  2 +-
>  fs/smb/server/ndr.h                   |  2 +-
>  fs/smb/server/smb2pdu.c               |  2 +-
>  fs/xattr.c                            |  2 +-
>  fs/xfs/xfs_itable.c                   |  2 +-
>  fs/xfs/xfs_itable.h                   |  2 +-
>  include/linux/fs.h                    |  6 +++---
>  security/integrity/ima/ima.h          | 10 +++++-----
>  security/integrity/ima/ima_api.c      |  2 +-
>  security/integrity/ima/ima_appraise.c |  2 +-
>  security/integrity/ima/ima_main.c     |  2 +-
>  security/integrity/ima/ima_policy.c   |  4 ++--
>  16 files changed, 23 insertions(+), 23 deletions(-)
> 
> diff --git a/fs/exfat/file.c b/fs/exfat/file.c
> index a2a9ee1a2004..0530803f71e8 100644
> --- a/fs/exfat/file.c
> +++ b/fs/exfat/file.c
> @@ -143,7 +143,7 @@ static long exfat_fallocate(struct file *file, int mode,
>       return err;
>  }
>  
> -static bool exfat_allow_set_time(struct mnt_idmap *idmap,
> +static bool exfat_allow_set_time(const struct mnt_idmap *idmap,
>                                struct exfat_sb_info *sbi, struct inode *inode)
>  {
>       mode_t allow_utime = sbi->options.allow_utime;
> diff --git a/fs/fat/file.c b/fs/fat/file.c
> index 1c835ca5f21a..0b8b493d06e4 100644
> --- a/fs/fat/file.c
> +++ b/fs/fat/file.c
> @@ -493,7 +493,7 @@ static int fat_sanitize_mode(const struct msdos_sb_info 
> *sbi,
>       return 0;
>  }
>  
> -static int fat_allow_set_time(struct mnt_idmap *idmap,
> +static int fat_allow_set_time(const struct mnt_idmap *idmap,
>                             struct msdos_sb_info *sbi, struct inode *inode)
>  {
>       umode_t allow_utime = sbi->options.allow_utime;
> diff --git a/fs/internal.h b/fs/internal.h
> index 87ac96c3e29e..72244e5f4e57 100644
> --- a/fs/internal.h
> +++ b/fs/internal.h
> @@ -299,7 +299,7 @@ int filename_setxattr(int dfd, struct filename *filename,
>  int setxattr_copy(const char __user *name, struct kernel_xattr_ctx *ctx);
>  int import_xattr_name(struct xattr_name *kname, const char __user *name);
>  
> -int may_write_xattr(struct mnt_idmap *idmap, struct inode *inode);
> +int may_write_xattr(const struct mnt_idmap *idmap, struct inode *inode);
>  
>  #ifdef CONFIG_FS_POSIX_ACL
>  int do_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
> diff --git a/fs/namei.c b/fs/namei.c
> index 20a6534ea3ef..603d43e4a961 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -1407,7 +1407,7 @@ int may_linkat(struct mnt_idmap *idmap, const struct 
> path *link)
>   *
>   * Returns 0 if the open is allowed, -ve on error.
>   */
> -static int may_create_in_sticky(struct mnt_idmap *idmap, struct nameidata 
> *nd,
> +static int may_create_in_sticky(const struct mnt_idmap *idmap, struct 
> nameidata *nd,
>                               struct inode *const inode)
>  {
>       umode_t dir_mode = nd->dir_mode;
> diff --git a/fs/smb/server/ndr.c b/fs/smb/server/ndr.c
> index 58d71560f626..7e546c22e284 100644
> --- a/fs/smb/server/ndr.c
> +++ b/fs/smb/server/ndr.c
> @@ -338,7 +338,7 @@ static int ndr_encode_posix_acl_entry(struct ndr *n, 
> struct xattr_smb_acl *acl)
>  }
>  
>  int ndr_encode_posix_acl(struct ndr *n,
> -                      struct mnt_idmap *idmap,
> +                      const struct mnt_idmap *idmap,
>                        struct inode *inode,
>                        struct xattr_smb_acl *acl,
>                        struct xattr_smb_acl *def_acl)
> diff --git a/fs/smb/server/ndr.h b/fs/smb/server/ndr.h
> index f3c108c8cf4d..646568c42e4d 100644
> --- a/fs/smb/server/ndr.h
> +++ b/fs/smb/server/ndr.h
> @@ -14,7 +14,7 @@ struct ndr {
>  
>  int ndr_encode_dos_attr(struct ndr *n, struct xattr_dos_attrib *da);
>  int ndr_decode_dos_attr(struct ndr *n, struct xattr_dos_attrib *da);
> -int ndr_encode_posix_acl(struct ndr *n, struct mnt_idmap *idmap,
> +int ndr_encode_posix_acl(struct ndr *n, const struct mnt_idmap *idmap,
>                        struct inode *inode, struct xattr_smb_acl *acl,
>                        struct xattr_smb_acl *def_acl);
>  int ndr_encode_v4_ntacl(struct ndr *n, struct xattr_ntacl *acl);
> diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c
> index a8046f477d54..0789200d602f 100644
> --- a/fs/smb/server/smb2pdu.c
> +++ b/fs/smb/server/smb2pdu.c
> @@ -3604,7 +3604,7 @@ static int smb2_create_sd_buffer(struct ksmbd_work 
> *work,
>  }
>  
>  static void ksmbd_acls_fattr(struct smb_fattr *fattr,
> -                          struct mnt_idmap *idmap,
> +                          const struct mnt_idmap *idmap,
>                            struct inode *inode)
>  {
>       vfsuid_t vfsuid = i_uid_into_vfsuid(idmap, inode);
> diff --git a/fs/xattr.c b/fs/xattr.c
> index d58979115200..c08f188748a9 100644
> --- a/fs/xattr.c
> +++ b/fs/xattr.c
> @@ -100,7 +100,7 @@ xattr_resolve_name(struct inode *inode, const char **name)
>   *
>   * Return: On success zero is returned. On error a negative errno is 
> returned.
>   */
> -int may_write_xattr(struct mnt_idmap *idmap, struct inode *inode)
> +int may_write_xattr(const struct mnt_idmap *idmap, struct inode *inode)
>  {
>       if (IS_IMMUTABLE(inode))
>               return -EPERM;
> diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
> index 159295c63e8f..a4cf1effa5e6 100644
> --- a/fs/xfs/xfs_itable.c
> +++ b/fs/xfs/xfs_itable.c
> @@ -63,7 +63,7 @@ want_metadir_file(
>  STATIC int
>  xfs_bulkstat_one_int(
>       struct xfs_mount        *mp,
> -     struct mnt_idmap        *idmap,
> +     const struct mnt_idmap  *idmap,
>       struct xfs_trans        *tp,
>       xfs_ino_t               ino,
>       struct xfs_bstat_chunk  *bc)
> diff --git a/fs/xfs/xfs_itable.h b/fs/xfs/xfs_itable.h
> index 2d0612f14d6e..c0567bfc30fb 100644
> --- a/fs/xfs/xfs_itable.h
> +++ b/fs/xfs/xfs_itable.h
> @@ -8,7 +8,7 @@
>  /* In-memory representation of a userspace request for batch inode data. */
>  struct xfs_ibulk {
>       struct xfs_mount        *mp;
> -     struct mnt_idmap        *idmap;
> +     const struct mnt_idmap  *idmap;
>       void __user             *ubuffer; /* user output buffer */
>       xfs_ino_t               startino; /* start with this inode */
>       unsigned int            icount;   /* number of elements in ubuffer */
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 959c747ef75a..cec5de83d882 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1439,7 +1439,7 @@ static inline void i_gid_write(struct inode *inode, 
> gid_t gid)
>   * Return: whe inode's i_uid mapped down according to @idmap.
>   * If the inode's i_uid has no mapping INVALID_VFSUID is returned.
>   */
> -static inline vfsuid_t i_uid_into_vfsuid(struct mnt_idmap *idmap,
> +static inline vfsuid_t i_uid_into_vfsuid(const struct mnt_idmap *idmap,
>                                        const struct inode *inode)
>  {
>       return make_vfsuid(idmap, i_user_ns(inode), inode->i_uid);
> @@ -1491,7 +1491,7 @@ static inline void i_uid_update(struct mnt_idmap *idmap,
>   * Return: the inode's i_gid mapped down according to @idmap.
>   * If the inode's i_gid has no mapping INVALID_VFSGID is returned.
>   */
> -static inline vfsgid_t i_gid_into_vfsgid(struct mnt_idmap *idmap,
> +static inline vfsgid_t i_gid_into_vfsgid(const struct mnt_idmap *idmap,
>                                        const struct inode *inode)
>  {
>       return make_vfsgid(idmap, i_user_ns(inode), inode->i_gid);
> @@ -2173,7 +2173,7 @@ extern loff_t vfs_dedupe_file_range_one(struct file 
> *src_file, loff_t src_pos,
>                                (inode)->i_rdev == WHITEOUT_DEV)
>  #define IS_ANON_FILE(inode)  ((inode)->i_flags & S_ANON_INODE)
>  
> -static inline bool HAS_UNMAPPED_ID(struct mnt_idmap *idmap,
> +static inline bool HAS_UNMAPPED_ID(const struct mnt_idmap *idmap,
>                                  struct inode *inode)
>  {
>       return !vfsuid_valid(i_uid_into_vfsuid(idmap, inode)) ||
> diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
> index 10214f73ca1e..b502854f28ee 100644
> --- a/security/integrity/ima/ima.h
> +++ b/security/integrity/ima/ima.h
> @@ -423,7 +423,7 @@ static inline void ima_process_queued_keys(void) {}
>  #endif /* CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS */
>  
>  /* LIM API function definitions */
> -int ima_get_action(struct mnt_idmap *idmap, struct inode *inode,
> +int ima_get_action(const struct mnt_idmap *idmap, struct inode *inode,
>                  const struct cred *cred, struct lsm_prop *prop, int mask,
>                  enum ima_hooks func, int *pcr,
>                  struct ima_template_desc **template_desc,
> @@ -437,7 +437,7 @@ void ima_store_measurement(struct ima_iint_cache *iint, 
> struct file *file,
>                          struct evm_ima_xattr_data *xattr_value,
>                          int xattr_len, const struct modsig *modsig, int pcr,
>                          struct ima_template_desc *template_desc);
> -int process_buffer_measurement(struct mnt_idmap *idmap,
> +int process_buffer_measurement(const struct mnt_idmap *idmap,
>                              struct inode *inode, const void *buf, int size,
>                              const char *eventname, enum ima_hooks func,
>                              int pcr, const char *func_data,
> @@ -454,7 +454,7 @@ void ima_free_template_entry(struct ima_template_entry 
> *entry);
>  const char *ima_d_path(const struct path *path, char **pathbuf, char 
> *filename);
>  
>  /* IMA policy related functions */
> -int ima_match_policy(struct mnt_idmap *idmap, struct inode *inode,
> +int ima_match_policy(const struct mnt_idmap *idmap, struct inode *inode,
>                    const struct cred *cred, struct lsm_prop *prop,
>                    enum ima_hooks func, int mask, int flags, int *pcr,
>                    struct ima_template_desc **template_desc,
> @@ -489,7 +489,7 @@ int ima_appraise_measurement(enum ima_hooks func, struct 
> ima_iint_cache *iint,
>                            struct evm_ima_xattr_data *xattr_value,
>                            int xattr_len, const struct modsig *modsig,
>                            bool bprm_is_check);
> -int ima_must_appraise(struct mnt_idmap *idmap, struct inode *inode,
> +int ima_must_appraise(const struct mnt_idmap *idmap, struct inode *inode,
>                     int mask, enum ima_hooks func);
>  void ima_update_xattr(struct ima_iint_cache *iint, struct file *file);
>  enum integrity_status ima_get_cache_status(struct ima_iint_cache *iint,
> @@ -519,7 +519,7 @@ static inline int ima_appraise_measurement(enum ima_hooks 
> func,
>       return INTEGRITY_UNKNOWN;
>  }
>  
> -static inline int ima_must_appraise(struct mnt_idmap *idmap,
> +static inline int ima_must_appraise(const struct mnt_idmap *idmap,
>                                   struct inode *inode, int mask,
>                                   enum ima_hooks func)
>  {
> diff --git a/security/integrity/ima/ima_api.c 
> b/security/integrity/ima/ima_api.c
> index 122d127e108d..3c5a23b4a2ff 100644
> --- a/security/integrity/ima/ima_api.c
> +++ b/security/integrity/ima/ima_api.c
> @@ -188,7 +188,7 @@ void ima_add_violation(struct file *file, const unsigned 
> char *filename,
>   * Returns IMA_MEASURE, IMA_APPRAISE mask.
>   *
>   */
> -int ima_get_action(struct mnt_idmap *idmap, struct inode *inode,
> +int ima_get_action(const struct mnt_idmap *idmap, struct inode *inode,
>                  const struct cred *cred, struct lsm_prop *prop, int mask,
>                  enum ima_hooks func, int *pcr,
>                  struct ima_template_desc **template_desc,
> diff --git a/security/integrity/ima/ima_appraise.c 
> b/security/integrity/ima/ima_appraise.c
> index ced2e131b061..6b21db789ef1 100644
> --- a/security/integrity/ima/ima_appraise.c
> +++ b/security/integrity/ima/ima_appraise.c
> @@ -71,7 +71,7 @@ bool is_ima_appraise_enabled(void)
>   *
>   * Return 1 to appraise or hash
>   */
> -int ima_must_appraise(struct mnt_idmap *idmap, struct inode *inode,
> +int ima_must_appraise(const struct mnt_idmap *idmap, struct inode *inode,
>                     int mask, enum ima_hooks func)
>  {
>       struct lsm_prop prop;
> diff --git a/security/integrity/ima/ima_main.c 
> b/security/integrity/ima/ima_main.c
> index ab1e53b3210d..8d9c92dc8825 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -1095,7 +1095,7 @@ static int ima_post_load_data(char *buf, loff_t size,
>   * has been written to the passed location but not added to a measurement 
> entry,
>   * a negative value otherwise.
>   */
> -int process_buffer_measurement(struct mnt_idmap *idmap,
> +int process_buffer_measurement(const struct mnt_idmap *idmap,
>                              struct inode *inode, const void *buf, int size,
>                              const char *eventname, enum ima_hooks func,
>                              int pcr, const char *func_data,
> diff --git a/security/integrity/ima/ima_policy.c 
> b/security/integrity/ima/ima_policy.c
> index f79d07bb63c6..89d197d99383 100644
> --- a/security/integrity/ima/ima_policy.c
> +++ b/security/integrity/ima/ima_policy.c
> @@ -575,7 +575,7 @@ static bool ima_match_rule_data(struct ima_rule_entry 
> *rule,
>   * Returns true on rule match, false on failure.
>   */
>  static bool ima_match_rules(struct ima_rule_entry *rule,
> -                         struct mnt_idmap *idmap,
> +                         const struct mnt_idmap *idmap,
>                           struct inode *inode, const struct cred *cred,
>                           struct lsm_prop *prop, enum ima_hooks func, int 
> mask,
>                           const char *func_data)
> @@ -757,7 +757,7 @@ static int get_subaction(struct ima_rule_entry *rule, 
> enum ima_hooks func)
>   * list when walking it.  Reads are many orders of magnitude more numerous
>   * than writes so ima_match_policy() is classical RCU candidate.
>   */
> -int ima_match_policy(struct mnt_idmap *idmap, struct inode *inode,
> +int ima_match_policy(const struct mnt_idmap *idmap, struct inode *inode,
>                    const struct cred *cred, struct lsm_prop *prop,
>                    enum ima_hooks func, int mask, int flags, int *pcr,
>                    struct ima_template_desc **template_desc,
> 
> -- 
> 2.53.0
> 
-- 
Jan Kara <[email protected]>
SUSE Labs, CR

Reply via email to