Blame view
include/linux/ipc_namespace.h
4.6 KB
b24413180 License cleanup: ... |
1 |
/* SPDX-License-Identifier: GPL-2.0 */ |
ae5e1b22f namespaces: move ... |
2 3 4 5 |
#ifndef __IPC_NAMESPACE_H__ #define __IPC_NAMESPACE_H__ #include <linux/err.h> |
ed2ddbf88 IPC: make struct ... |
6 7 |
#include <linux/idr.h> #include <linux/rwsem.h> |
b6b337ad1 ipc: recompute ms... |
8 |
#include <linux/notifier.h> |
b0e77598f userns: user name... |
9 |
#include <linux/nsproxy.h> |
435d5f4bb common object emb... |
10 |
#include <linux/ns_common.h> |
a2e0602c3 ipc: convert ipc_... |
11 |
#include <linux/refcount.h> |
0eb71a9da rhashtable: split... |
12 |
#include <linux/rhashtable-types.h> |
b6b337ad1 ipc: recompute ms... |
13 |
|
b515498f5 userns: add a use... |
14 |
struct user_namespace; |
ed2ddbf88 IPC: make struct ... |
15 16 17 18 |
struct ipc_ids { int in_use; unsigned short seq; |
d9a605e40 ipc: rename ids->... |
19 |
struct rw_semaphore rwsem; |
ed2ddbf88 IPC: make struct ... |
20 |
struct idr ipcs_idr; |
27c331a17 ipc/util.c: furth... |
21 |
int max_idx; |
3278a2c20 ipc: conserve seq... |
22 |
int last_idx; /* For wrap around detection */ |
b8fd99838 sysvipc: unteach ... |
23 |
#ifdef CONFIG_CHECKPOINT_RESTORE |
03f595668 ipc: add sysctl t... |
24 |
int next_id; |
b8fd99838 sysvipc: unteach ... |
25 |
#endif |
0cfb6aee7 ipc: optimize sem... |
26 |
struct rhashtable key_ht; |
ed2ddbf88 IPC: make struct ... |
27 |
}; |
ae5e1b22f namespaces: move ... |
28 |
|
ae5e1b22f namespaces: move ... |
29 |
struct ipc_namespace { |
a2e0602c3 ipc: convert ipc_... |
30 |
refcount_t count; |
ed2ddbf88 IPC: make struct ... |
31 |
struct ipc_ids ids[3]; |
ae5e1b22f namespaces: move ... |
32 33 34 |
int sem_ctls[4]; int used_sems; |
9bf76ca32 ipc, msg: forbid ... |
35 36 37 |
unsigned int msg_ctlmax; unsigned int msg_ctlmnb; unsigned int msg_ctlmni; |
ae5e1b22f namespaces: move ... |
38 39 40 41 42 |
atomic_t msg_bytes; atomic_t msg_hdrs; size_t shm_ctlmax; size_t shm_ctlall; |
d69f3bad4 ipc: sysv shared ... |
43 |
unsigned long shm_tot; |
ae5e1b22f namespaces: move ... |
44 |
int shm_ctlmni; |
b34a6b1da ipc: introduce sh... |
45 46 47 48 49 |
/* * Defines whether IPC_RMID is forced for _all_ shm segments regardless * of shmctl() */ int shm_rmid_forced; |
b6b337ad1 ipc: recompute ms... |
50 |
|
b6b337ad1 ipc: recompute ms... |
51 |
struct notifier_block ipcns_nb; |
614b84cf4 namespaces: mqueu... |
52 53 54 55 56 57 58 59 60 61 62 |
/* The kern_mount of the mqueuefs sb. We take a ref on it */ struct vfsmount *mq_mnt; /* # queues in this ns, protected by mq_lock */ unsigned int mq_queues_count; /* next fields are set through sysctl */ unsigned int mq_queues_max; /* initialized to DFLT_QUEUESMAX */ unsigned int mq_msg_max; /* initialized to DFLT_MSGMAX */ unsigned int mq_msgsize_max; /* initialized to DFLT_MSGSIZEMAX */ |
cef0184c1 mqueue: separate ... |
63 64 |
unsigned int mq_msg_default; unsigned int mq_msgsize_default; |
614b84cf4 namespaces: mqueu... |
65 |
|
b515498f5 userns: add a use... |
66 67 |
/* user_ns which owns the ipc ns */ struct user_namespace *user_ns; |
aba356616 ipcns: Add a lim... |
68 |
struct ucounts *ucounts; |
98f842e67 proc: Usable inod... |
69 |
|
e1eb26fa6 ipc/namespace.c: ... |
70 |
struct llist_node mnt_llist; |
435d5f4bb common object emb... |
71 |
struct ns_common ns; |
3859a271a randstruct: Mark ... |
72 |
} __randomize_layout; |
ae5e1b22f namespaces: move ... |
73 74 |
extern struct ipc_namespace init_ipc_ns; |
7eafd7c74 namespaces: ipc n... |
75 |
extern spinlock_t mq_lock; |
b6b337ad1 ipc: recompute ms... |
76 |
|
614b84cf4 namespaces: mqueu... |
77 |
#ifdef CONFIG_SYSVIPC |
b34a6b1da ipc: introduce sh... |
78 |
extern void shm_destroy_orphaned(struct ipc_namespace *ns); |
b6b337ad1 ipc: recompute ms... |
79 |
#else /* CONFIG_SYSVIPC */ |
b34a6b1da ipc: introduce sh... |
80 |
static inline void shm_destroy_orphaned(struct ipc_namespace *ns) {} |
b6b337ad1 ipc: recompute ms... |
81 |
#endif /* CONFIG_SYSVIPC */ |
ae5e1b22f namespaces: move ... |
82 |
|
614b84cf4 namespaces: mqueu... |
83 |
#ifdef CONFIG_POSIX_MQUEUE |
7eafd7c74 namespaces: ipc n... |
84 |
extern int mq_init_ns(struct ipc_namespace *ns); |
5b5c4d1a1 ipc/mqueue: updat... |
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
/* * POSIX Message Queue default values: * * MIN_*: Lowest value an admin can set the maximum unprivileged limit to * DFLT_*MAX: Default values for the maximum unprivileged limits * DFLT_{MSG,MSGSIZE}: Default values used when the user doesn't supply * an attribute to the open call and the queue must be created * HARD_*: Highest value the maximums can be set to. These are enforced * on CAP_SYS_RESOURCE apps as well making them inviolate (so make them * suitably high) * * POSIX Requirements: * Per app minimum openable message queues - 8. This does not map well * to the fact that we limit the number of queues on a per namespace * basis instead of a per app basis. So, make the default high enough * that no given app should have a hard time opening 8 queues. * Minimum maximum for HARD_MSGMAX - 32767. I bumped this to 65536. * Minimum maximum for HARD_MSGSIZEMAX - POSIX is silent on this. However, * we have run into a situation where running applications in the wild * require this to be at least 5MB, and preferably 10MB, so I set the * value to 16MB in hopes that this user is the worst of the bunch and * the new maximum will handle anyone else. I may have to revisit this * in the future. */ |
5b5c4d1a1 ipc/mqueue: updat... |
109 |
#define DFLT_QUEUESMAX 256 |
5b5c4d1a1 ipc/mqueue: updat... |
110 |
#define MIN_MSGMAX 1 |
e6315bb15 mqueue: revert bu... |
111 112 |
#define DFLT_MSG 10U #define DFLT_MSGMAX 10 |
5b5c4d1a1 ipc/mqueue: updat... |
113 114 115 |
#define HARD_MSGMAX 65536 #define MIN_MSGSIZEMAX 128 #define DFLT_MSGSIZE 8192U |
e6315bb15 mqueue: revert bu... |
116 |
#define DFLT_MSGSIZEMAX 8192 |
5b5c4d1a1 ipc/mqueue: updat... |
117 |
#define HARD_MSGSIZEMAX (16*1024*1024) |
614b84cf4 namespaces: mqueu... |
118 |
#else |
7eafd7c74 namespaces: ipc n... |
119 |
static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; } |
614b84cf4 namespaces: mqueu... |
120 121 122 |
#endif #if defined(CONFIG_IPC_NS) |
ae5e1b22f namespaces: move ... |
123 |
extern struct ipc_namespace *copy_ipcs(unsigned long flags, |
bcf58e725 userns: Make crea... |
124 |
struct user_namespace *user_ns, struct ipc_namespace *ns); |
ae5e1b22f namespaces: move ... |
125 126 127 |
static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) { if (ns) |
a2e0602c3 ipc: convert ipc_... |
128 |
refcount_inc(&ns->count); |
ae5e1b22f namespaces: move ... |
129 130 |
return ns; } |
7eafd7c74 namespaces: ipc n... |
131 |
extern void put_ipc_ns(struct ipc_namespace *ns); |
ae5e1b22f namespaces: move ... |
132 133 |
#else static inline struct ipc_namespace *copy_ipcs(unsigned long flags, |
bcf58e725 userns: Make crea... |
134 |
struct user_namespace *user_ns, struct ipc_namespace *ns) |
ae5e1b22f namespaces: move ... |
135 136 137 |
{ if (flags & CLONE_NEWIPC) return ERR_PTR(-EINVAL); |
bcf58e725 userns: Make crea... |
138 |
return ns; |
ae5e1b22f namespaces: move ... |
139 140 141 142 143 144 145 146 147 148 149 |
} static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) { return ns; } static inline void put_ipc_ns(struct ipc_namespace *ns) { } #endif |
bdc8e5f85 namespaces: mqueu... |
150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
#ifdef CONFIG_POSIX_MQUEUE_SYSCTL struct ctl_table_header; extern struct ctl_table_header *mq_register_sysctl_table(void); #else /* CONFIG_POSIX_MQUEUE_SYSCTL */ static inline struct ctl_table_header *mq_register_sysctl_table(void) { return NULL; } #endif /* CONFIG_POSIX_MQUEUE_SYSCTL */ |
ae5e1b22f namespaces: move ... |
164 |
#endif |