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 5190936 : static inline void get_fs_root(struct fs_struct *fs, struct path *root) 28 : { 29 5190936 : spin_lock(&fs->lock); 30 5196308 : *root = fs->root; 31 5196308 : path_get(root); 32 5205345 : spin_unlock(&fs->lock); 33 5205352 : } 34 : 35 2626 : static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd) 36 : { 37 2626 : spin_lock(&fs->lock); 38 2626 : *pwd = fs->pwd; 39 2626 : path_get(pwd); 40 2626 : spin_unlock(&fs->lock); 41 2626 : } 42 : 43 : extern bool current_chrooted(void); 44 : 45 : #endif /* _LINUX_FS_STRUCT_H */