Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifndef _LINUX_FS_STRUCT_H 3 : : #define _LINUX_FS_STRUCT_H 4 : : 5 : : #include <linux/path.h> 6 : : #include <linux/spinlock.h> 7 : : #include <linux/seqlock.h> 8 : : 9 : : struct fs_struct { 10 : : int users; 11 : : spinlock_t lock; 12 : : seqcount_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 : : 27 : 28106 : static inline void get_fs_root(struct fs_struct *fs, struct path *root) 28 : : { 29 : 28106 : spin_lock(&fs->lock); 30 : 28106 : *root = fs->root; 31 : 28106 : path_get(root); 32 : 28106 : spin_unlock(&fs->lock); 33 : 28106 : } 34 : : 35 : 0 : static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd) 36 : : { 37 : 0 : spin_lock(&fs->lock); 38 : 0 : *pwd = fs->pwd; 39 : 0 : path_get(pwd); 40 : 0 : spin_unlock(&fs->lock); 41 : 0 : } 42 : : 43 : : extern bool current_chrooted(void); 44 : : 45 : : #endif /* _LINUX_FS_STRUCT_H */