|
@@ -199,9 +199,7 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
|
|
|
|
- /*
|
|
|
|
- * ipc_addid() locks msq
|
|
|
|
- */
|
|
|
|
|
|
+ /* ipc_addid() locks msq upon success. */
|
|
id = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni);
|
|
id = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni);
|
|
if (id < 0) {
|
|
if (id < 0) {
|
|
security_msg_queue_free(msq);
|
|
security_msg_queue_free(msq);
|
|
@@ -218,7 +216,8 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
|
|
INIT_LIST_HEAD(&msq->q_receivers);
|
|
INIT_LIST_HEAD(&msq->q_receivers);
|
|
INIT_LIST_HEAD(&msq->q_senders);
|
|
INIT_LIST_HEAD(&msq->q_senders);
|
|
|
|
|
|
- msg_unlock(msq);
|
|
|
|
|
|
+ spin_unlock(&msq->q_perm.lock);
|
|
|
|
+ rcu_read_unlock();
|
|
|
|
|
|
return msq->q_perm.id;
|
|
return msq->q_perm.id;
|
|
}
|
|
}
|