summaryrefslogtreecommitdiffstats
path: root/sys/kern/sysv_msg.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/sysv_msg.c')
-rw-r--r--sys/kern/sysv_msg.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/kern/sysv_msg.c b/sys/kern/sysv_msg.c
index ff4729e..6b8ab1e 100644
--- a/sys/kern/sysv_msg.c
+++ b/sys/kern/sysv_msg.c
@@ -30,6 +30,7 @@
#include <sys/sysent.h>
#include <sys/sysctl.h>
#include <sys/malloc.h>
+#include <sys/jail.h>
static MALLOC_DEFINE(M_MSG, "msg", "SVID compatible message queues");
@@ -210,6 +211,9 @@ msgsys(p, uap)
} */ *uap;
{
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
if (uap->which >= sizeof(msgcalls)/sizeof(msgcalls[0]))
return (EINVAL);
return ((*msgcalls[uap->which])(p, &uap->a2));
@@ -263,6 +267,9 @@ msgctl(p, uap)
printf("call to msgctl(%d, %d, 0x%x)\n", msqid, cmd, user_msqptr);
#endif
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
msqid = IPCID_TO_IX(msqid);
if (msqid < 0 || msqid >= msginfo.msgmni) {
@@ -399,6 +406,9 @@ msgget(p, uap)
printf("msgget(0x%x, 0%o)\n", key, msgflg);
#endif
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
if (key != IPC_PRIVATE) {
for (msqid = 0; msqid < msginfo.msgmni; msqid++) {
msqptr = &msqids[msqid];
@@ -511,6 +521,9 @@ msgsnd(p, uap)
msgflg);
#endif
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
msqid = IPCID_TO_IX(msqid);
if (msqid < 0 || msqid >= msginfo.msgmni) {
@@ -835,6 +848,9 @@ msgrcv(p, uap)
msgsz, msgtyp, msgflg);
#endif
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
msqid = IPCID_TO_IX(msqid);
if (msqid < 0 || msqid >= msginfo.msgmni) {
OpenPOWER on IntegriCloud