|
@@ -17,12 +17,27 @@
|
|
|
* Pavel Emelianov <xemul@openvz.org>
|
|
|
*
|
|
|
* General sysv ipc locking scheme:
|
|
|
- * when doing ipc id lookups, take the ids->rwsem
|
|
|
- * rcu_read_lock()
|
|
|
- * obtain the ipc object (kern_ipc_perm)
|
|
|
- * perform security, capabilities, auditing and permission checks, etc.
|
|
|
- * acquire the ipc lock (kern_ipc_perm.lock) throught ipc_lock_object()
|
|
|
- * perform data updates (ie: SET, RMID, LOCK/UNLOCK commands)
|
|
|
+ * rcu_read_lock()
|
|
|
+ * obtain the ipc object (kern_ipc_perm) by looking up the id in an idr
|
|
|
+ * tree.
|
|
|
+ * - perform initial checks (capabilities, auditing and permission,
|
|
|
+ * etc).
|
|
|
+ * - perform read-only operations, such as STAT, INFO commands.
|
|
|
+ * acquire the ipc lock (kern_ipc_perm.lock) through
|
|
|
+ * ipc_lock_object()
|
|
|
+ * - perform data updates, such as SET, RMID commands and
|
|
|
+ * mechanism-specific operations (semop/semtimedop,
|
|
|
+ * msgsnd/msgrcv, shmat/shmdt).
|
|
|
+ * drop the ipc lock, through ipc_unlock_object().
|
|
|
+ * rcu_read_unlock()
|
|
|
+ *
|
|
|
+ * The ids->rwsem must be taken when:
|
|
|
+ * - creating, removing and iterating the existing entries in ipc
|
|
|
+ * identifier sets.
|
|
|
+ * - iterating through files under /proc/sysvipc/
|
|
|
+ *
|
|
|
+ * Note that sems have a special fast path that avoids kern_ipc_perm.lock -
|
|
|
+ * see sem_lock().
|
|
|
*/
|
|
|
|
|
|
#include <linux/mm.h>
|