aboutsummaryrefslogtreecommitdiff
path: root/sys/netipsec
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2024-01-16 20:00:36 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2024-01-16 20:02:59 +0000
commit296a4cb5c5b18f82da7a365d9f209cb9fc09003b (patch)
tree284a591b45b8438c5dc505e60e15bbcdd8d2790e /sys/netipsec
parent61a0eaca0dd7de0c08b46c986aee345922c804f0 (diff)
Diffstat (limited to 'sys/netipsec')
-rw-r--r--sys/netipsec/keysock.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/sys/netipsec/keysock.c b/sys/netipsec/keysock.c
index 18bbdae316f0..d9297d44c18a 100644
--- a/sys/netipsec/keysock.c
+++ b/sys/netipsec/keysock.c
@@ -310,9 +310,24 @@ key_detach(struct socket *so)
}
static int
-key_shutdown(struct socket *so)
+key_shutdown(struct socket *so, enum shutdown_how how)
{
- socantsendmore(so);
+ /*
+ * Note: key socket marks itself as connected through its lifetime.
+ */
+ switch (how) {
+ case SHUT_RD:
+ socantrcvmore(so);
+ sbrelease(so, SO_RCV);
+ break;
+ case SHUT_RDWR:
+ socantrcvmore(so);
+ sbrelease(so, SO_RCV);
+ /* FALLTHROUGH */
+ case SHUT_WR:
+ socantsendmore(so);
+ }
+
return (0);
}