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