X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=ipc%2Fmsg.c;fp=ipc%2Fmsg.c;h=8983ea57d970464c7051b83534fdad7e462e7e4b;hb=0f3d2b0135f4bdbfe47a99753923a64efd373d11;hp=558aa91186b6ced1a27b1e05b65c5ee129e0a175;hpb=78f5009cc35eb5e52d276a046d90ee2f41b60f8c;p=~andy%2Flinux diff --git a/ipc/msg.c b/ipc/msg.c index 558aa91186b..8983ea57d97 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -696,7 +696,7 @@ long do_msgsnd(int msqid, long mtype, void __user *mtext, goto out_unlock0; /* raced with RMID? */ - if (msq->q_perm.deleted) { + if (!ipc_valid_object(&msq->q_perm)) { err = -EIDRM; goto out_unlock0; } @@ -731,7 +731,8 @@ long do_msgsnd(int msqid, long mtype, void __user *mtext, ipc_lock_object(&msq->q_perm); ipc_rcu_putref(msq, ipc_rcu_free); - if (msq->q_perm.deleted) { + /* raced with RMID? */ + if (!ipc_valid_object(&msq->q_perm)) { err = -EIDRM; goto out_unlock0; } @@ -909,7 +910,7 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgfl ipc_lock_object(&msq->q_perm); /* raced with RMID? */ - if (msq->q_perm.deleted) { + if (!ipc_valid_object(&msq->q_perm)) { msg = ERR_PTR(-EIDRM); goto out_unlock0; }