diff options
Diffstat (limited to 'include/linux/ipc_namespace.h')
| -rw-r--r-- | include/linux/ipc_namespace.h | 42 | 
1 files changed, 37 insertions, 5 deletions
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h index 8a297a5e794..5499c92a915 100644 --- a/include/linux/ipc_namespace.h +++ b/include/linux/ipc_namespace.h @@ -62,6 +62,8 @@ struct ipc_namespace {  	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 */ +	unsigned int    mq_msg_default; +	unsigned int    mq_msgsize_default;  	/* user_ns which owns the ipc ns */  	struct user_namespace *user_ns; @@ -90,11 +92,41 @@ static inline void shm_destroy_orphaned(struct ipc_namespace *ns) {}  #ifdef CONFIG_POSIX_MQUEUE  extern int mq_init_ns(struct ipc_namespace *ns); -/* default values */ -#define DFLT_QUEUESMAX 256     /* max number of message queues */ -#define DFLT_MSGMAX    10      /* max number of messages in each queue */ -#define HARD_MSGMAX    (32768*sizeof(void *)/4) -#define DFLT_MSGSIZEMAX 8192   /* max message size */ +/* + * 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. + */ +#define MIN_QUEUESMAX			1 +#define DFLT_QUEUESMAX		      256 +#define HARD_QUEUESMAX		     1024 +#define MIN_MSGMAX			1 +#define DFLT_MSG		       10U +#define DFLT_MSGMAX		       10 +#define HARD_MSGMAX		    65536 +#define MIN_MSGSIZEMAX		      128 +#define DFLT_MSGSIZE		     8192U +#define DFLT_MSGSIZEMAX		     8192 +#define HARD_MSGSIZEMAX	    (16*1024*1024)  #else  static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; }  #endif  |