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_spinlock_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 : static inline void get_fs_root(struct fs_struct *fs, struct path *root) 28 : { 29 0 : spin_lock(&fs->lock); 30 0 : *root = fs->root; 31 0 : path_get(root); 32 0 : spin_unlock(&fs->lock); 33 : } 34 : 35 : 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 : } 42 : 43 : extern bool current_chrooted(void); 44 : 45 : #endif /* _LINUX_FS_STRUCT_H */