aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libc/sys/shmctl.211
-rw-r--r--sys/kern/sysv_shm.c2
2 files changed, 8 insertions, 5 deletions
diff --git a/lib/libc/sys/shmctl.2 b/lib/libc/sys/shmctl.2
index 98ddf13e8ec4..788e79f1900d 100644
--- a/lib/libc/sys/shmctl.2
+++ b/lib/libc/sys/shmctl.2
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 17, 1995
+.Dd October 10, 2015
.Dt SHMCTL 2
.Os
.Sh NAME
@@ -72,15 +72,18 @@ or it must have superuser privileges.
.It Dv IPC_RMID
Removes the segment from the system.
The removal will not take
-effect until all processes having attached the segment have exited;
-however, once the IPC_RMID operation has taken place, no further
-processes will be allowed to attach the segment.
+effect until all processes having attached the segment have exited.
For the operation
to succeed, the calling process's effective uid must match
.Fa shm_perm.uid
or
.Fa shm_perm.cuid ,
or the process must have superuser privileges.
+If the
+.Va kern.ipc.shm_allow_removed
+.Xr sysctl 3
+variable is set to 0, once the IPC_RMID operation has taken place,
+no further processes will be allowed to attach the segment.
.\" .It Dv SHM_LOCK
.\" Locks the segment in memory. The calling process must have
.\" superuser privileges. Not implemented in FreeBSD.
diff --git a/sys/kern/sysv_shm.c b/sys/kern/sysv_shm.c
index 3d5dd11a2edb..b426f4561ef1 100644
--- a/sys/kern/sysv_shm.c
+++ b/sys/kern/sysv_shm.c
@@ -162,7 +162,7 @@ struct shminfo shminfo = {
};
static int shm_use_phys;
-static int shm_allow_removed;
+static int shm_allow_removed = 1;
SYSCTL_ULONG(_kern_ipc, OID_AUTO, shmmax, CTLFLAG_RWTUN, &shminfo.shmmax, 0,
"Maximum shared memory segment size");