Branch data Line data Source code
1 : : #ifndef _LINUX_UTSNAME_H
2 : : #define _LINUX_UTSNAME_H
3 : :
4 : :
5 : : #include <linux/sched.h>
6 : : #include <linux/kref.h>
7 : : #include <linux/nsproxy.h>
8 : : #include <linux/err.h>
9 : : #include <uapi/linux/utsname.h>
10 : :
11 : : enum uts_proc {
12 : : UTS_PROC_OSTYPE,
13 : : UTS_PROC_OSRELEASE,
14 : : UTS_PROC_VERSION,
15 : : UTS_PROC_HOSTNAME,
16 : : UTS_PROC_DOMAINNAME,
17 : : };
18 : :
19 : : struct user_namespace;
20 : : extern struct user_namespace init_user_ns;
21 : :
22 : : struct uts_namespace {
23 : : struct kref kref;
24 : : struct new_utsname name;
25 : : struct user_namespace *user_ns;
26 : : unsigned int proc_inum;
27 : : };
28 : : extern struct uts_namespace init_uts_ns;
29 : :
30 : : #ifdef CONFIG_UTS_NS
31 : : static inline void get_uts_ns(struct uts_namespace *ns)
32 : : {
33 : : kref_get(&ns->kref);
34 : : }
35 : :
36 : : extern struct uts_namespace *copy_utsname(unsigned long flags,
37 : : struct user_namespace *user_ns, struct uts_namespace *old_ns);
38 : : extern void free_uts_ns(struct kref *kref);
39 : :
40 : : static inline void put_uts_ns(struct uts_namespace *ns)
41 : : {
42 : : kref_put(&ns->kref, free_uts_ns);
43 : : }
44 : : #else
45 : : static inline void get_uts_ns(struct uts_namespace *ns)
46 : : {
47 : : }
48 : :
49 : : static inline void put_uts_ns(struct uts_namespace *ns)
50 : : {
51 : : }
52 : :
53 : : static inline struct uts_namespace *copy_utsname(unsigned long flags,
54 : : struct user_namespace *user_ns, struct uts_namespace *old_ns)
55 : : {
56 [ + + ]: 12 : if (flags & CLONE_NEWUTS)
57 : : return ERR_PTR(-EINVAL);
58 : :
59 : : return old_ns;
60 : : }
61 : : #endif
62 : :
63 : : #ifdef CONFIG_PROC_SYSCTL
64 : : extern void uts_proc_notify(enum uts_proc proc);
65 : : #else
66 : : static inline void uts_proc_notify(enum uts_proc proc)
67 : : {
68 : : }
69 : : #endif
70 : :
71 : : static inline struct new_utsname *utsname(void)
72 : : {
73 : 29281 : return ¤t->nsproxy->uts_ns->name;
74 : : }
75 : :
76 : : static inline struct new_utsname *init_utsname(void)
77 : : {
78 : : return &init_uts_ns.name;
79 : : }
80 : :
81 : : extern struct rw_semaphore uts_sem;
82 : :
83 : : #endif /* _LINUX_UTSNAME_H */
|