summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2014-09-05 19:50:18 +0000
committerglebius <glebius@FreeBSD.org>2014-09-05 19:50:18 +0000
commit8122a06e8ccd8849959c415e2a69face5392e4fa (patch)
tree4400e8074fa18f08a96904797c1513203c0f87b3
parent0203a5011385fdcd9b113b20a06cfe2ebf92b9a0 (diff)
downloadFreeBSD-src-8122a06e8ccd8849959c415e2a69face5392e4fa.zip
FreeBSD-src-8122a06e8ccd8849959c415e2a69face5392e4fa.tar.gz
Set vnet context before accessing V_socket_hhh[].
Submitted by: "Hiroo Ono (小野寛生)" <hiroo.ono+freebsd gmail.com>
-rw-r--r--sys/kern/uipc_socket.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 9b12bd7..c6c3152 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -3265,9 +3265,11 @@ filt_soread(struct knote *kn, long hint)
return 1;
}
+ CURVNET_SET(so->so_vnet);
if (V_socket_hhh[HHOOK_FILT_SOREAD]->hhh_nhooks > 0)
/* This hook returning non-zero indicates an event, not error */
return (hhook_run_socket(so, NULL, HHOOK_FILT_SOREAD));
+ CURVNET_RESTORE();
return (0);
}
@@ -3294,8 +3296,10 @@ filt_sowrite(struct knote *kn, long hint)
SOCKBUF_LOCK_ASSERT(&so->so_snd);
kn->kn_data = sbspace(&so->so_snd);
+ CURVNET_SET(so->so_vnet);
if (V_socket_hhh[HHOOK_FILT_SOWRITE]->hhh_nhooks > 0)
hhook_run_socket(so, kn, HHOOK_FILT_SOWRITE);
+ CURVNET_RESTORE();
if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
kn->kn_flags |= EV_EOF;
OpenPOWER on IntegriCloud