head	1.6;
access;
symbols
	RELENG_8_4:1.6.0.2
	RELENG_9_1_0_RELEASE:1.5.2.1.4.2
	RELENG_9_1:1.5.2.1.0.4
	RELENG_9_1_BP:1.5.2.1
	RELENG_8_3_0_RELEASE:1.4.2.2.4.1
	RELENG_8_3:1.4.2.2.0.4
	RELENG_8_3_BP:1.4.2.2
	RELENG_9_0_0_RELEASE:1.5.2.1.2.1
	RELENG_9_0:1.5.2.1.0.2
	RELENG_9_0_BP:1.5.2.1
	RELENG_9:1.5.0.2
	RELENG_9_BP:1.5
	RELENG_7_4_0_RELEASE:1.2.10.1.6.1
	RELENG_8_2_0_RELEASE:1.4.2.2.2.1
	RELENG_7_4:1.2.10.1.0.6
	RELENG_7_4_BP:1.2.10.1
	RELENG_8_2:1.4.2.2.0.2
	RELENG_8_2_BP:1.4.2.2
	RELENG_8_1_0_RELEASE:1.4.2.1.4.1
	RELENG_8_1:1.4.2.1.0.4
	RELENG_8_1_BP:1.4.2.1
	RELENG_7_3_0_RELEASE:1.2.10.1.4.1
	RELENG_7_3:1.2.10.1.0.4
	RELENG_7_3_BP:1.2.10.1
	RELENG_8_0_0_RELEASE:1.4.2.1.2.1
	RELENG_8_0:1.4.2.1.0.2
	RELENG_8_0_BP:1.4.2.1
	RELENG_8:1.4.0.2
	RELENG_8_BP:1.4
	RELENG_7_2_0_RELEASE:1.2.10.1.2.1
	RELENG_7_2:1.2.10.1.0.2
	RELENG_7_2_BP:1.2.10.1
	RELENG_7_1_0_RELEASE:1.2.18.1
	RELENG_6_4_0_RELEASE:1.2.16.1
	RELENG_7_1:1.2.0.18
	RELENG_7_1_BP:1.2
	RELENG_6_4:1.2.0.16
	RELENG_6_4_BP:1.2
	RELENG_7_0_0_RELEASE:1.2
	RELENG_6_3_0_RELEASE:1.2
	RELENG_7_0:1.2.0.14
	RELENG_7_0_BP:1.2
	RELENG_6_3:1.2.0.12
	RELENG_6_3_BP:1.2
	RELENG_7:1.2.0.10
	RELENG_7_BP:1.2
	RELENG_6_2_0_RELEASE:1.2
	RELENG_6_2:1.2.0.8
	RELENG_6_2_BP:1.2
	RELENG_5_5_0_RELEASE:1.1
	RELENG_5_5:1.1.0.14
	RELENG_5_5_BP:1.1
	RELENG_6_1_0_RELEASE:1.2
	RELENG_6_1:1.2.0.6
	RELENG_6_1_BP:1.2
	RELENG_6_0_0_RELEASE:1.2
	RELENG_6_0:1.2.0.4
	RELENG_6_0_BP:1.2
	RELENG_6:1.2.0.2
	RELENG_6_BP:1.2
	RELENG_5_4_0_RELEASE:1.1
	RELENG_5_4:1.1.0.12
	RELENG_5_4_BP:1.1
	RELENG_5_3_0_RELEASE:1.1
	RELENG_5_3:1.1.0.10
	RELENG_5_3_BP:1.1
	RELENG_5:1.1.0.8
	RELENG_5_BP:1.1
	RELENG_5_2_1_RELEASE:1.1
	RELENG_5_2_0_RELEASE:1.1
	RELENG_5_2:1.1.0.6
	RELENG_5_2_BP:1.1
	RELENG_5_1_0_RELEASE:1.1
	RELENG_5_1:1.1.0.4
	RELENG_5_1_BP:1.1
	RELENG_5_0_0_RELEASE:1.1
	RELENG_5_0:1.1.0.2
	RELENG_5_0_BP:1.1;
locks; strict;
comment	@# @;


1.6
date	2012.11.17.01.53.00;	author svnexp;	state Exp;
branches
	1.6.2.1;
next	1.5;

1.5
date	2010.08.15.15.33.01;	author kib;	state Exp;
branches
	1.5.2.1;
next	1.4;

1.4
date	2009.06.06.17.01.44;	author rwatson;	state Exp;
branches
	1.4.2.1;
next	1.3;

1.3
date	2008.06.27.05.39.04;	author jhb;	state Exp;
branches;
next	1.2;

1.2
date	2005.05.04.10.39.14;	author rwatson;	state Exp;
branches
	1.2.2.1
	1.2.10.1
	1.2.16.1
	1.2.18.1;
next	1.1;

1.1
date	2002.09.19.00.43.32;	author alfred;	state Exp;
branches;
next	;

1.6.2.1
date	2012.11.17.01.53.00;	author svnexp;	state dead;
branches;
next	1.6.2.2;

1.6.2.2
date	2013.03.28.13.05.23;	author svnexp;	state Exp;
branches;
next	;

1.5.2.1
date	2011.09.23.00.51.37;	author kensmith;	state Exp;
branches
	1.5.2.1.2.1
	1.5.2.1.4.1;
next	1.5.2.2;

1.5.2.2
date	2012.11.17.11.37.18;	author svnexp;	state Exp;
branches;
next	;

1.5.2.1.2.1
date	2011.11.11.04.20.22;	author kensmith;	state Exp;
branches;
next	1.5.2.1.2.2;

1.5.2.1.2.2
date	2012.11.17.08.37.14;	author svnexp;	state Exp;
branches;
next	;

1.5.2.1.4.1
date	2012.08.05.23.54.33;	author kensmith;	state Exp;
branches;
next	1.5.2.1.4.2;

1.5.2.1.4.2
date	2012.11.17.08.48.05;	author svnexp;	state Exp;
branches;
next	;

1.4.2.1
date	2009.08.03.08.13.06;	author kensmith;	state Exp;
branches
	1.4.2.1.2.1
	1.4.2.1.4.1;
next	1.4.2.2;

1.4.2.2
date	2010.08.22.14.54.59;	author kib;	state Exp;
branches
	1.4.2.2.2.1
	1.4.2.2.4.1;
next	1.4.2.3;

1.4.2.3
date	2012.11.17.10.36.58;	author svnexp;	state Exp;
branches;
next	;

1.4.2.1.2.1
date	2009.10.25.01.10.29;	author kensmith;	state Exp;
branches;
next	;

1.4.2.1.4.1
date	2010.06.14.02.09.06;	author kensmith;	state Exp;
branches;
next	;

1.4.2.2.2.1
date	2010.12.21.17.09.25;	author kensmith;	state Exp;
branches;
next	;

1.4.2.2.4.1
date	2012.03.03.06.15.13;	author kensmith;	state Exp;
branches;
next	1.4.2.2.4.2;

1.4.2.2.4.2
date	2012.11.17.08.25.33;	author svnexp;	state Exp;
branches;
next	;

1.2.2.1
date	2012.11.17.07.44.25;	author svnexp;	state Exp;
branches;
next	;

1.2.10.1
date	2009.02.17.19.57.52;	author jhb;	state Exp;
branches
	1.2.10.1.2.1
	1.2.10.1.4.1
	1.2.10.1.6.1;
next	1.2.10.2;

1.2.10.2
date	2012.11.17.08.06.55;	author svnexp;	state Exp;
branches;
next	;

1.2.10.1.2.1
date	2009.04.15.03.14.26;	author kensmith;	state Exp;
branches;
next	;

1.2.10.1.4.1
date	2010.02.10.00.26.20;	author kensmith;	state Exp;
branches;
next	;

1.2.10.1.6.1
date	2010.12.21.17.10.29;	author kensmith;	state Exp;
branches;
next	1.2.10.1.6.2;

1.2.10.1.6.2
date	2012.11.17.08.17.27;	author svnexp;	state Exp;
branches;
next	;

1.2.16.1
date	2008.10.02.02.57.24;	author kensmith;	state Exp;
branches;
next	;

1.2.18.1
date	2008.11.25.02.59.29;	author kensmith;	state Exp;
branches;
next	;


desc
@@


1.6
log
@Switching exporter and resync
@
text
@# $FreeBSD: head/sys/modules/sem/Makefile 211339 2010-08-15 15:33:01Z kib $

.PATH: ${.CURDIR}/../../kern

KMOD=	sem
SRCS=	uipc_sem.c opt_compat.h opt_posix.h vnode_if.h

.include <bsd.kmod.mk>
@


1.6.2.1
log
@file Makefile was added on branch RELENG_8_4 on 2013-03-28 13:05:23 +0000
@
text
@d1 8
@


1.6.2.2
log
@## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/248810
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
@
text
@a0 8
# $FreeBSD: releng/8.4/sys/modules/sem/Makefile 211624 2010-08-22 14:54:59Z kib $

.PATH: ${.CURDIR}/../../kern

KMOD=	sem
SRCS=	uipc_sem.c opt_compat.h opt_posix.h vnode_if.h

.include <bsd.kmod.mk>
@


1.5
log
@SVN rev 211339 on 2010-08-15 15:33:01Z by kib

Add missed dependency.

Submitted by:	gcooper
MFC after:	1 week
@
text
@d1 1
a1 1
# $FreeBSD$
@


1.5.2.1
log
@SVN rev 225736 on 2011-09-23 00:51:37Z by kensmith

Copy head to stable/9 as part of 9.0-RELEASE release cycle.

Approved by:	re (implicit)
@
text
@@


1.5.2.2
log
@## SVN ##
## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/ 242902
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ## r242902 | dteske | 2012-11-11 23:29:45 +0000 (Sun, 11 Nov 2012) | 10 lines
## SVN ##
## SVN ## Fix a regression introduced by SVN r211417 that saw the breakage of a feature
## SVN ## documented in usr.sbin/sysinstall/help/shortcuts.hlp (reproduced below):
## SVN ##
## SVN ## If /usr/sbin/sysinstall is linked to another filename, say
## SVN ## `/usr/local/bin/configPackages', then the basename will be used
## SVN ## as an implicit command name.
## SVN ##
## SVN ## Reviewed by:	adrian (co-mentor)
## SVN ## Approved by:	adrian (co-mentor)
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ##
@
text
@d1 1
a1 1
# $FreeBSD: stable/9/sys/modules/sem/Makefile 211339 2010-08-15 15:33:01Z kib $
@


1.5.2.1.4.1
log
@SVN rev 239080 on 2012-08-05 23:54:33Z by kensmith

Copy stable/9 to releng/9.1 as part of the 9.1-RELEASE release process.

Approved by:	re (implicit)
@
text
@@


1.5.2.1.4.2
log
@Switch importer
@
text
@d1 1
a1 1
# $FreeBSD: releng/9.1/sys/modules/sem/Makefile 211339 2010-08-15 15:33:01Z kib $
@


1.5.2.1.2.1
log
@SVN rev 227445 on 2011-11-11 04:20:22Z by kensmith

Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
cycle.

Approved by:	re (implicit)
@
text
@@


1.5.2.1.2.2
log
@Switch importer
@
text
@d1 1
a1 1
# $FreeBSD: releng/9.0/sys/modules/sem/Makefile 211339 2010-08-15 15:33:01Z kib $
@


1.4
log
@SVN rev 193588 on 2009-06-06 17:01:44Z by rwatson

Remove opt_mac.h generation for various kernel modules that no longer
require it.

Submitted by:	pjd
@
text
@d6 1
a6 1
SRCS=	uipc_sem.c opt_posix.h vnode_if.h
@


1.4.2.1
log
@SVN rev 196045 on 2009-08-03 08:13:06Z by kensmith

Copy head to stable/8 as part of 8.0 Release cycle.

Approved by:	re (Implicit)
@
text
@@


1.4.2.2
log
@SVN rev 211624 on 2010-08-22 14:54:59Z by kib

MFC r211339:
Add missed dependency.
@
text
@d6 1
a6 1
SRCS=	uipc_sem.c opt_compat.h opt_posix.h vnode_if.h
@


1.4.2.3
log
@## SVN ##
## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/ 242909
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ## r242909 | dim | 2012-11-12 07:47:19 +0000 (Mon, 12 Nov 2012) | 20 lines
## SVN ##
## SVN ## MFC r242625:
## SVN ##
## SVN ## Remove duplicate const specifiers in many drivers (I hope I got all of
## SVN ## them, please let me know if not).  Most of these are of the form:
## SVN ##
## SVN ## static const struct bzzt_type {
## SVN ##       [...list of members...]
## SVN ## } const bzzt_devs[] = {
## SVN ##       [...list of initializers...]
## SVN ## };
## SVN ##
## SVN ## The second const is unnecessary, as arrays cannot be modified anyway,
## SVN ## and if the elements are const, the whole thing is const automatically
## SVN ## (e.g. it is placed in .rodata).
## SVN ##
## SVN ## I have verified this does not change the binary output of a full kernel
## SVN ## build (except for build timestamps embedded in the object files).
## SVN ##
## SVN ## Reviewed by:	yongari, marius
## SVN ##
## SVN ## ------------------------------------------------------------------------
## SVN ##
@
text
@d1 1
a1 1
# $FreeBSD: stable/8/sys/modules/sem/Makefile 211624 2010-08-22 14:54:59Z kib $
@


1.4.2.2.4.1
log
@SVN rev 232438 on 2012-03-03 06:15:13Z by kensmith

Copy stable/8 to releng/8.3 as part of 8.3-RELEASE release cycle.

Approved by:	re (implicit)
@
text
@@


1.4.2.2.4.2
log
@Switch importer
@
text
@d1 1
a1 1
# $FreeBSD: releng/8.3/sys/modules/sem/Makefile 211624 2010-08-22 14:54:59Z kib $
@


1.4.2.2.2.1
log
@SVN rev 216617 on 2010-12-21 17:09:25Z by kensmith

Copy stable/8 to releng/8.2 in preparation for FreeBSD-8.2 release.

Approved by:	re (implicit)
@
text
@@


1.4.2.1.4.1
log
@SVN rev 209145 on 2010-06-14 02:09:06Z by kensmith

Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.

Approved by:	re (implicit)
@
text
@@


1.4.2.1.2.1
log
@SVN rev 198460 on 2009-10-25 01:10:29Z by kensmith

Copy stable/8 to releng/8.0 as part of 8.0-RELEASE release procedure.

Approved by:	re (implicit)
@
text
@@


1.3
log
@SVN rev 180059 on 2008-06-27 05:39:04Z by jhb

Rework the lifetime management of the kernel implementation of POSIX
semaphores.  Specifically, semaphores are now represented as new file
descriptor type that is set to close on exec.  This removes the need for
all of the manual process reference counting (and fork, exec, and exit
event handlers) as the normal file descriptor operations handle all of
that for us nicely.  It is also suggested as one possible implementation
in the spec and at least one other OS (OS X) uses this approach.

Some bugs that were fixed as a result include:
- References to a named semaphore whose name is removed still work after
  the sem_unlink() operation.  Prior to this patch, if a semaphore's name
  was removed, valid handles from sem_open() would get EINVAL errors from
  sem_getvalue(), sem_post(), etc.  This fixes that.
- Unnamed semaphores created with sem_init() were not cleaned up when a
  process exited or exec'd.  They were only cleaned up if the process
  did an explicit sem_destroy().  This could result in a leak of semaphore
  objects that could never be cleaned up.
- On the other hand, if another process guessed the id (kernel pointer to
  'struct ksem' of an unnamed semaphore (created via sem_init)) and had
  write access to the semaphore based on UID/GID checks, then that other
  process could manipulate the semaphore via sem_destroy(), sem_post(),
  sem_wait(), etc.
- As part of the permission check (UID/GID), the umask of the proces
  creating the semaphore was not honored.  Thus if your umask denied group
  read/write access but the explicit mode in the sem_init() call allowed
  it, the semaphore would be readable/writable by other users in the
  same group, for example.  This includes access via the previous bug.
- If the module refused to unload because there were active semaphores,
  then it might have deregistered one or more of the semaphore system
  calls before it noticed that there was a problem.  I'm not sure if
  this actually happened as the order that modules are discovered by the
  kernel linker depends on how the actual .ko file is linked.  One can
  make the order deterministic by using a single module with a mod_event
  handler that explicitly registers syscalls (and deregisters during
  unload after any checks).  This also fixes a race where even if the
  sem_module unloaded first it would have destroyed locks that the
  syscalls might be trying to access if they are still executing when
  they are unloaded.

  XXX: By the way, deregistering system calls doesn't do any blocking
  to drain any threads from the calls.
- Some minor fixes to errno values on error.  For example, sem_init()
  isn't documented to return ENFILE or EMFILE if we run out of semaphores
  the way that sem_open() can.  Instead, it should return ENOSPC in that
  case.

Other changes:
- Kernel semaphores now use a hash table to manage the namespace of
  named semaphores nearly in a similar fashion to the POSIX shared memory
  object file descriptors.  Kernel semaphores can now also have names
  longer than 14 chars (up to MAXPATHLEN) and can include subdirectories
  in their pathname.
- The UID/GID permission checks for access to a named semaphore are now
  done via vaccess() rather than a home-rolled set of checks.
- Now that kernel semaphores have an associated file object, the various
  MAC checks for POSIX semaphores accept both a file credential and an
  active credential.  There is also a new posixsem_check_stat() since it
  is possible to fstat() a semaphore file descriptor.
- A small set of regression tests (using the ksem API directly) is present
  in src/tools/regression/posixsem.

Reported by:	kris (1)
Tested by:	kris
Reviewed by:	rwatson (lightly)
MFC after:	1 month
@
text
@d6 1
a6 1
SRCS=	uipc_sem.c opt_mac.h opt_posix.h vnode_if.h
@


1.2
log
@Introduce MAC Framework and MAC Policy entry points to label and control
access to POSIX Semaphores:

mac_init_posix_sem()            Initialize label for POSIX semaphore
mac_create_posix_sem()          Create POSIX semaphore
mac_destroy_posix_sem()         Destroy POSIX semaphore
mac_check_posix_sem_destroy()   Check whether semaphore may be destroyed
mac_check_posix_sem_getvalue()  Check whether semaphore may be queried
mac_check_possix_sem_open()     Check whether semaphore may be opened
mac_check_posix_sem_post()      Check whether semaphore may be posted to
mac_check_posix_sem_unlink()    Check whether semaphore may be unlinked
mac_check_posix_sem_wait()      Check whether may wait on semaphore

Update Biba, MLS, Stub, and Test policies to implement these entry points.
For information flow policies, most semaphore operations are effectively
read/write.

Submitted by:	Dandekar Hrishikesh <rishi_dandekar at sbcglobal dot net>
Sponsored by:	DARPA, McAfee, SPARTA
Obtained from:	TrustedBSD Project
@
text
@d6 1
a6 1
SRCS=	uipc_sem.c opt_mac.h opt_posix.h
@


1.2.2.1
log
@Switch importer
@
text
@d1 1
a1 1
# $FreeBSD: stable/6/sys/modules/sem/Makefile 145855 2005-05-04 10:39:15Z rwatson $
@


1.2.10.1
log
@SVN rev 188727 on 2009-02-17 19:57:52Z by jhb

MFC: Rework the lifetime management of the kernel implementation of POSIX
semaphores.  Specifically, semaphores are now represented as new file
descriptor type that is set to close on exec.  This removes the need for
all of the manual process reference counting (and fork, exec, and exit
event handlers) as the normal file descriptor operations handle all of
that for us nicely.  It is also suggested as one possible implementation
in the spec and at least one other OS (OS X) uses this approach.

Refer to the original commit for more details on specific bug fixes, etc.
A notable difference in this MFC relative to the original commit to HEAD
is that the MAC entry points are unchanged to preserve the ABI for MAC
policy modules.  fstat() on a POSIX semaphore in 7 uses the
mac_check_posix_sem_getvalue() hook to determine access as that is the
closest match to stat() of the available hooks.

Discussed with:	 rwatson (MAC bits (or lack thereof))
@
text
@d6 1
a6 1
SRCS=	uipc_sem.c opt_mac.h opt_posix.h vnode_if.h
@


1.2.10.2
log
@Switch importer
@
text
@d1 1
a1 1
# $FreeBSD: stable/7/sys/modules/sem/Makefile 188727 2009-02-17 19:57:52Z jhb $
@


1.2.10.1.6.1
log
@SVN rev 216618 on 2010-12-21 17:10:29Z by kensmith

Copy stable/7 to releng/7.4 in preparation for FreeBSD-7.4 release.

Approved by:	re (implicit)
@
text
@@


1.2.10.1.6.2
log
@Switch importer
@
text
@d1 1
a1 1
# $FreeBSD: releng/7.4/sys/modules/sem/Makefile 188727 2009-02-17 19:57:52Z jhb $
@


1.2.10.1.4.1
log
@SVN rev 203736 on 2010-02-10 00:26:20Z by kensmith

Copy stable/7 to releng/7.3 as part of the 7.3-RELEASE process.

Approved by:	re (implicit)
@
text
@@


1.2.10.1.2.1
log
@SVN rev 191087 on 2009-04-15 03:14:26Z by kensmith

Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.

Approved by:	re (implicit)
@
text
@@


1.2.18.1
log
@SVN rev 185281 on 2008-11-25 02:59:29Z by kensmith

Create releng/7.1 in preparation for moving into RC phase of 7.1 release
cycle.

Approved by:	re (implicit)
@
text
@@


1.2.16.1
log
@SVN rev 183531 on 2008-10-02 02:57:24Z by kensmith

Create releng/6.4 from stable/6 in preparation for 6.4-RC1.

Approved by:	re (implicit)
@
text
@@


1.1
log
@Add the rest of the kernel support for the sem_ API in kern/uipc_sem.c.

Option 'P1003_1B_SEMAPHORES' to compile them in, or load the "sem" module
to activate them.

Have kern/makesyscalls.sh emit an include for sys/_semaphore.h into sysproto.h
to pull in the typedef for semid_t.

Add the syscalls to the syscall table as module stubs.
@
text
@d6 1
a6 1
SRCS=	uipc_sem.c opt_posix.h
@

