summaryrefslogtreecommitdiff
path: root/sys/kern/sysv_shm.c
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2000-10-31 01:34:00 +0000
committerRobert Watson <rwatson@FreeBSD.org>2000-10-31 01:34:00 +0000
commitcb1f0db9dbf89ed25f16308c33a721e7ed6ba531 (patch)
treeb0ec2ffe85da615f776308cb36aaa2c2b2a74d0e /sys/kern/sysv_shm.c
parentf7261d9c5f19e5e785bd29a60f3f5336f1154163 (diff)
Notes
Diffstat (limited to 'sys/kern/sysv_shm.c')
-rw-r--r--sys/kern/sysv_shm.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/kern/sysv_shm.c b/sys/kern/sysv_shm.c
index 11a55686162b..9ad550999379 100644
--- a/sys/kern/sysv_shm.c
+++ b/sys/kern/sysv_shm.c
@@ -46,6 +46,7 @@
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/sysent.h>
+#include <sys/jail.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
@@ -223,6 +224,9 @@ shmdt(p, uap)
struct shmmap_state *shmmap_s;
int i;
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
shmmap_s = (struct shmmap_state *)p->p_vmspace->vm_shm;
if (shmmap_s == NULL)
return EINVAL;
@@ -257,6 +261,9 @@ shmat(p, uap)
vm_size_t size;
int rv;
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
shmmap_s = (struct shmmap_state *)p->p_vmspace->vm_shm;
if (shmmap_s == NULL) {
size = shminfo.shmseg * sizeof(struct shmmap_state);
@@ -348,6 +355,9 @@ oshmctl(p, uap)
struct shmid_ds *shmseg;
struct oshmid_ds outbuf;
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
shmseg = shm_find_segment_by_shmid(uap->shmid);
if (shmseg == NULL)
return EINVAL;
@@ -396,6 +406,9 @@ shmctl(p, uap)
struct shmid_ds inbuf;
struct shmid_ds *shmseg;
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
shmseg = shm_find_segment_by_shmid(uap->shmid);
if (shmseg == NULL)
return EINVAL;
@@ -572,6 +585,9 @@ shmget(p, uap)
{
int segnum, mode, error;
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
mode = uap->shmflg & ACCESSPERMS;
if (uap->key != IPC_PRIVATE) {
again:
@@ -600,6 +616,9 @@ shmsys(p, uap)
} */ *uap;
{
+ if (!jail_sysvipc_allowed && p->p_prison != NULL)
+ return (ENOSYS);
+
if (uap->which >= sizeof(shmcalls)/sizeof(shmcalls[0]))
return EINVAL;
return ((*shmcalls[uap->which])(p, &uap->a2));