--- uipc_socket.c	2013-06-28 11:14:22.000000000 +0200
+++ uipc_socket.c	2013-07-15 14:53:15.000000000 +0200
@@ -1728,6 +1728,8 @@ dontblock:
 				VNET_SO_ASSERT(so);
 				error = (*pr->pr_domain->dom_externalize)
 				    (cm, controlp, flags);
+				if (error != 0)
+					goto release;
 				SOCKBUF_LOCK(&so->so_rcv);
 			} else if (controlp != NULL)
 				*controlp = cm;
@@ -2363,6 +2365,10 @@ soreceive_dgram(struct socket *so, struc
 			if (pr->pr_domain->dom_externalize != NULL) {
 				error = (*pr->pr_domain->dom_externalize)
 				    (cm, controlp, flags);
+				if (error != 0) {
+					m_freem(m);
+					return (error);
+				}
 			} else if (controlp != NULL)
 				*controlp = cm;
 			else
