summaryrefslogtreecommitdiffstats
path: root/sys/netipsec/keysock.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netipsec/keysock.c')
-rw-r--r--sys/netipsec/keysock.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/netipsec/keysock.c b/sys/netipsec/keysock.c
index 4b55e05..fa9f839 100644
--- a/sys/netipsec/keysock.c
+++ b/sys/netipsec/keysock.c
@@ -284,6 +284,16 @@ key_sendup_mbuf(struct socket *so, struct mbuf *m, int target)
msg = mtod(m, struct sadb_msg *);
PFKEYSTAT_INC(in_msgtype[msg->sadb_msg_type]);
}
+ if (target == KEY_SENDUP_ONESHOT) {
+ rp = sotorawcb(so);
+ if (!sbappendaddrchain(&rp->rcb_socket->so_rcv,
+ (struct sockaddr *) &key_src, m)) {
+ m_freem(m);
+ error = ENOBUFS;
+ }
+ sorwakeup(rp->rcb_socket);
+ return error;
+ }
mtx_lock(&rawcb_mtx);
LIST_FOREACH(rp, &V_rawcb_list, list)
{
@@ -339,12 +349,7 @@ key_sendup_mbuf(struct socket *so, struct mbuf *m, int target)
return ENOBUFS;
}
- if ((error = key_sendup0(rp, n, 0)) != 0) {
- m_freem(m);
- mtx_unlock(&rawcb_mtx);
- return error;
- }
-
+ key_sendup0(rp, n, 0);
n = NULL;
}
OpenPOWER on IntegriCloud