diff options
-rw-r--r-- | lib/libc/sys/shmctl.2 | 11 | ||||
-rw-r--r-- | sys/kern/sysv_shm.c | 2 |
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"); |