summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_socket.c
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2017-07-20 08:25:17 +0000
committermpi <mpi@openbsd.org>2017-07-20 08:25:17 +0000
commitaf41df574a3857a7ad8e76fc51fe8b9e7dd460f0 (patch)
tree7cf85846fcf59f3771f96f174b8da883fd1468bc /sys/kern/sys_socket.c
parentPrepare filt_soread() to be locked. No functionnal change. (diff)
downloadwireguard-openbsd-af41df574a3857a7ad8e76fc51fe8b9e7dd460f0.tar.xz
wireguard-openbsd-af41df574a3857a7ad8e76fc51fe8b9e7dd460f0.zip
Extend the scope of the socket lock in soo_stat() to protect `so_state'
and `so_rcv'. ok bluhm@, claudio@, visa@
Diffstat (limited to 'sys/kern/sys_socket.c')
-rw-r--r--sys/kern/sys_socket.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
index 0a225cb95ec..6dfcb36ced7 100644
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sys_socket.c,v 1.30 2017/02/22 10:20:21 mpi Exp $ */
+/* $OpenBSD: sys_socket.c,v 1.31 2017/07/20 08:25:17 mpi Exp $ */
/* $NetBSD: sys_socket.c,v 1.13 1995/08/12 23:59:09 mycroft Exp $ */
/*
@@ -180,14 +180,13 @@ soo_stat(struct file *fp, struct stat *ub, struct proc *p)
memset(ub, 0, sizeof (*ub));
ub->st_mode = S_IFSOCK;
- if ((so->so_state & SS_CANTRCVMORE) == 0 ||
- so->so_rcv.sb_cc != 0)
+ s = solock(so);
+ if ((so->so_state & SS_CANTRCVMORE) == 0 || so->so_rcv.sb_cc != 0)
ub->st_mode |= S_IRUSR | S_IRGRP | S_IROTH;
if ((so->so_state & SS_CANTSENDMORE) == 0)
ub->st_mode |= S_IWUSR | S_IWGRP | S_IWOTH;
ub->st_uid = so->so_euid;
ub->st_gid = so->so_egid;
- s = solock(so);
(void) ((*so->so_proto->pr_usrreq)(so, PRU_SENSE,
(struct mbuf *)ub, NULL, NULL, p));
sounlock(s);