Apply by doing: cd /usr patch -p0 < 001_pfkey.patch And then rebuild your kernel. Index: src/sys/net/pfkey.c diff -u src/sys/net/pfkey.c:1.4 src/sys/net/pfkey.c:1.5 --- src/sys/net/pfkey.c:1.4 Sun Apr 11 13:41:35 1999 +++ src/sys/net/pfkey.c Mon May 3 16:30:27 1999 @@ -117,22 +117,36 @@ pfkey_output(struct mbuf *mbuf, struct socket *socket) { void *message; + int error = 0; #if DIAGNOSTIC - if (!mbuf || !(mbuf->m_flags & M_PKTHDR)) - return EINVAL; + if (!mbuf || !(mbuf->m_flags & M_PKTHDR)) { + error = EINVAL; + goto ret; + } #endif /* DIAGNOSTIC */ - if (mbuf->m_pkthdr.len > PFKEY_MSG_MAXSZ) - return EMSGSIZE; + if (mbuf->m_pkthdr.len > PFKEY_MSG_MAXSZ) { + error = EMSGSIZE; + goto ret; + } if (!(message = malloc((unsigned long) mbuf->m_pkthdr.len, M_TEMP, - M_DONTWAIT))) - return ENOMEM; + M_DONTWAIT))) { + error = ENOMEM; + goto ret; + } m_copydata(mbuf, 0, mbuf->m_pkthdr.len, message); - return pfkey_versions[socket->so_proto->pr_protocol]->send(socket, message, mbuf->m_pkthdr.len); + error = + pfkey_versions[socket->so_proto->pr_protocol]->send(socket, message, + mbuf->m_pkthdr.len); + + ret: + if (mbuf) + m_freem (mbuf); + return error; } static int