diff options
| author | Robert Watson <rwatson@FreeBSD.org> | 2000-10-31 01:34:00 +0000 |
|---|---|---|
| committer | Robert Watson <rwatson@FreeBSD.org> | 2000-10-31 01:34:00 +0000 |
| commit | cb1f0db9dbf89ed25f16308c33a721e7ed6ba531 (patch) | |
| tree | b0ec2ffe85da615f776308cb36aaa2c2b2a74d0e /sys/kern/sysv_shm.c | |
| parent | f7261d9c5f19e5e785bd29a60f3f5336f1154163 (diff) | |
Notes
Diffstat (limited to 'sys/kern/sysv_shm.c')
| -rw-r--r-- | sys/kern/sysv_shm.c | 19 |
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)); |
