LCOV - code coverage report
Current view: top level - include/linux - mount.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 2 2 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  *
       4             :  * Definitions for mount interface. This describes the in the kernel build 
       5             :  * linkedlist with mounted filesystems.
       6             :  *
       7             :  * Author:  Marco van Wieringen <mvw@planets.elm.net>
       8             :  *
       9             :  */
      10             : #ifndef _LINUX_MOUNT_H
      11             : #define _LINUX_MOUNT_H
      12             : 
      13             : #include <linux/types.h>
      14             : #include <linux/list.h>
      15             : #include <linux/nodemask.h>
      16             : #include <linux/spinlock.h>
      17             : #include <linux/seqlock.h>
      18             : #include <linux/atomic.h>
      19             : 
      20             : struct super_block;
      21             : struct vfsmount;
      22             : struct dentry;
      23             : struct mnt_namespace;
      24             : struct fs_context;
      25             : 
      26             : #define MNT_NOSUID      0x01
      27             : #define MNT_NODEV       0x02
      28             : #define MNT_NOEXEC      0x04
      29             : #define MNT_NOATIME     0x08
      30             : #define MNT_NODIRATIME  0x10
      31             : #define MNT_RELATIME    0x20
      32             : #define MNT_READONLY    0x40    /* does the user want this to be r/o? */
      33             : #define MNT_NOSYMFOLLOW 0x80
      34             : 
      35             : #define MNT_SHRINKABLE  0x100
      36             : #define MNT_WRITE_HOLD  0x200
      37             : 
      38             : #define MNT_SHARED      0x1000  /* if the vfsmount is a shared mount */
      39             : #define MNT_UNBINDABLE  0x2000  /* if the vfsmount is a unbindable mount */
      40             : /*
      41             :  * MNT_SHARED_MASK is the set of flags that should be cleared when a
      42             :  * mount becomes shared.  Currently, this is only the flag that says a
      43             :  * mount cannot be bind mounted, since this is how we create a mount
      44             :  * that shares events with another mount.  If you add a new MNT_*
      45             :  * flag, consider how it interacts with shared mounts.
      46             :  */
      47             : #define MNT_SHARED_MASK (MNT_UNBINDABLE)
      48             : #define MNT_USER_SETTABLE_MASK  (MNT_NOSUID | MNT_NODEV | MNT_NOEXEC \
      49             :                                  | MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME \
      50             :                                  | MNT_READONLY | MNT_NOSYMFOLLOW)
      51             : #define MNT_ATIME_MASK (MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME )
      52             : 
      53             : #define MNT_INTERNAL_FLAGS (MNT_SHARED | MNT_WRITE_HOLD | MNT_INTERNAL | \
      54             :                             MNT_DOOMED | MNT_SYNC_UMOUNT | MNT_MARKED | \
      55             :                             MNT_CURSOR)
      56             : 
      57             : #define MNT_INTERNAL    0x4000
      58             : 
      59             : #define MNT_LOCK_ATIME          0x040000
      60             : #define MNT_LOCK_NOEXEC         0x080000
      61             : #define MNT_LOCK_NOSUID         0x100000
      62             : #define MNT_LOCK_NODEV          0x200000
      63             : #define MNT_LOCK_READONLY       0x400000
      64             : #define MNT_LOCKED              0x800000
      65             : #define MNT_DOOMED              0x1000000
      66             : #define MNT_SYNC_UMOUNT         0x2000000
      67             : #define MNT_MARKED              0x4000000
      68             : #define MNT_UMOUNT              0x8000000
      69             : #define MNT_CURSOR              0x10000000
      70             : 
      71             : struct vfsmount {
      72             :         struct dentry *mnt_root;        /* root of the mounted tree */
      73             :         struct super_block *mnt_sb;     /* pointer to superblock */
      74             :         int mnt_flags;
      75             :         struct user_namespace *mnt_userns;
      76             : } __randomize_layout;
      77             : 
      78      121454 : static inline struct user_namespace *mnt_user_ns(const struct vfsmount *mnt)
      79             : {
      80             :         /* Pairs with smp_store_release() in do_idmap_mount(). */
      81      376538 :         return smp_load_acquire(&mnt->mnt_userns);
      82             : }
      83             : 
      84             : struct file; /* forward dec */
      85             : struct path;
      86             : 
      87             : extern int mnt_want_write(struct vfsmount *mnt);
      88             : extern int mnt_want_write_file(struct file *file);
      89             : extern void mnt_drop_write(struct vfsmount *mnt);
      90             : extern void mnt_drop_write_file(struct file *file);
      91             : extern void mntput(struct vfsmount *mnt);
      92             : extern struct vfsmount *mntget(struct vfsmount *mnt);
      93             : extern struct vfsmount *mnt_clone_internal(const struct path *path);
      94             : extern bool __mnt_is_readonly(struct vfsmount *mnt);
      95             : extern bool mnt_may_suid(struct vfsmount *mnt);
      96             : 
      97             : struct path;
      98             : extern struct vfsmount *clone_private_mount(const struct path *path);
      99             : extern int __mnt_want_write(struct vfsmount *);
     100             : extern void __mnt_drop_write(struct vfsmount *);
     101             : 
     102             : struct file_system_type;
     103             : extern struct vfsmount *fc_mount(struct fs_context *fc);
     104             : extern struct vfsmount *vfs_create_mount(struct fs_context *fc);
     105             : extern struct vfsmount *vfs_kern_mount(struct file_system_type *type,
     106             :                                       int flags, const char *name,
     107             :                                       void *data);
     108             : extern struct vfsmount *vfs_submount(const struct dentry *mountpoint,
     109             :                                      struct file_system_type *type,
     110             :                                      const char *name, void *data);
     111             : 
     112             : extern void mnt_set_expiry(struct vfsmount *mnt, struct list_head *expiry_list);
     113             : extern void mark_mounts_for_expiry(struct list_head *mounts);
     114             : 
     115             : extern dev_t name_to_dev_t(const char *name);
     116             : 
     117             : extern unsigned int sysctl_mount_max;
     118             : 
     119             : extern bool path_is_mountpoint(const struct path *path);
     120             : 
     121             : extern void kern_unmount_array(struct vfsmount *mnt[], unsigned int num);
     122             : 
     123             : #endif /* _LINUX_MOUNT_H */

Generated by: LCOV version 1.14