1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LINUX_FS_STRUCT_H 3 #define _LINUX_FS_STRUCT_H 4 5 #include <linux/sched.h> 6 #include <linux/path.h> 7 #include <linux/spinlock.h> 8 #include <linux/seqlock.h> 9 10 struct fs_struct { 11 int users; 12 seqlock_t seq; 13 int umask; 14 int in_exec; 15 struct path root, pwd; 16 } __randomize_layout; 17 18 extern struct kmem_cache *fs_cachep; 19 20 extern void exit_fs(struct task_struct *); 21 extern void set_fs_root(struct fs_struct *, const struct path *); 22 extern void set_fs_pwd(struct fs_struct *, const struct path *); 23 extern struct fs_struct *copy_fs_struct(struct fs_struct *); 24 extern void free_fs_struct(struct fs_struct *); 25 extern int unshare_fs_struct(void); 26 get_fs_root(struct fs_struct * fs,struct path * root)27static inline void get_fs_root(struct fs_struct *fs, struct path *root) 28 { 29 read_seqlock_excl(&fs->seq); 30 *root = fs->root; 31 path_get(root); 32 read_sequnlock_excl(&fs->seq); 33 } 34 get_fs_pwd(struct fs_struct * fs,struct path * pwd)35static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd) 36 { 37 read_seqlock_excl(&fs->seq); 38 *pwd = fs->pwd; 39 path_get(pwd); 40 read_sequnlock_excl(&fs->seq); 41 } 42 43 extern bool current_chrooted(void); 44 current_umask(void)45static inline int current_umask(void) 46 { 47 return current->fs->umask; 48 } 49 50 #endif /* _LINUX_FS_STRUCT_H */ 51