 ipc/msg.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ipc/msg.c b/ipc/msg.c
index 31cd1bf6af27..b841508556cb 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -870,6 +870,7 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp,
 						msg = copy_msg(msg, copy);
 						if (IS_ERR(msg))
 							goto out_unlock;
+						copy = NULL;
 						break;
 					}
 				} else
@@ -976,10 +977,9 @@ out_unlock:
 			break;
 		}
 	}
-	if (IS_ERR(msg)) {
-		free_copy(copy);
+	free_copy(copy);
+	if (IS_ERR(msg))
 		return PTR_ERR(msg);
-	}
 
 	bufsz = msg_handler(buf, msg, bufsz);
 	free_msg(msg);
