aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2025-01-17 02:31:15 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2025-01-17 02:31:15 +0000
commit1e9bca400b9c7ae3dc3f31aa48df69cf2259e16c (patch)
tree2f249b9dc7eb6a7d0e8d9a2750b5b9e9c7d68896
parent40462a376a324c19845a5f696c565069142ef326 (diff)
sockets: assert VNET set in sopeeraddr()
Most callers already have the context set, it was only bare syscall that needs it to set.
-rw-r--r--sys/kern/uipc_socket.c4
-rw-r--r--sys/kern/uipc_syscalls.c2
2 files changed, 4 insertions, 2 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 426316ac6ce8..46a7053f2872 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -2030,11 +2030,11 @@ sopeeraddr(struct socket *so, struct sockaddr *sa)
#endif
int error;
- CURVNET_SET(so->so_vnet);
+ CURVNET_ASSERT_SET();
+
error = so->so_proto->pr_peeraddr(so, sa);
KASSERT(sa->sa_len <= len,
("%s: protocol %p sockaddr overflow", __func__, so->so_proto));
- CURVNET_RESTORE();
return (error);
}
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index e0bb7ace92c6..91fcdf9a7a9d 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1433,7 +1433,9 @@ kern_getpeername(struct thread *td, int fd, struct sockaddr *sa)
error = ENOTCONN;
goto done;
}
+ CURVNET_SET(so->so_vnet);
error = sopeeraddr(so, sa);
+ CURVNET_RESTORE();
#ifdef KTRACE
if (error == 0 && KTRPOINT(td, KTR_STRUCT))
ktrsockaddr(sa);