diff options
author | glebius <glebius@FreeBSD.org> | 2014-09-05 19:50:18 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2014-09-05 19:50:18 +0000 |
commit | 8122a06e8ccd8849959c415e2a69face5392e4fa (patch) | |
tree | 4400e8074fa18f08a96904797c1513203c0f87b3 | |
parent | 0203a5011385fdcd9b113b20a06cfe2ebf92b9a0 (diff) | |
download | FreeBSD-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.c | 4 |
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; |