|
@@ -695,6 +695,12 @@ long do_msgsnd(int msqid, long mtype, void __user *mtext,
|
|
|
if (ipcperms(ns, &msq->q_perm, S_IWUGO))
|
|
|
goto out_unlock0;
|
|
|
|
|
|
+ /* raced with RMID? */
|
|
|
+ if (msq->q_perm.deleted) {
|
|
|
+ err = -EIDRM;
|
|
|
+ goto out_unlock0;
|
|
|
+ }
|
|
|
+
|
|
|
err = security_msg_queue_msgsnd(msq, msg, msgflg);
|
|
|
if (err)
|
|
|
goto out_unlock0;
|
|
@@ -901,6 +907,13 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgfl
|
|
|
goto out_unlock1;
|
|
|
|
|
|
ipc_lock_object(&msq->q_perm);
|
|
|
+
|
|
|
+ /* raced with RMID? */
|
|
|
+ if (msq->q_perm.deleted) {
|
|
|
+ msg = ERR_PTR(-EIDRM);
|
|
|
+ goto out_unlock0;
|
|
|
+ }
|
|
|
+
|
|
|
msg = find_msg(msq, &msgtyp, mode);
|
|
|
if (!IS_ERR(msg)) {
|
|
|
/*
|