freebsd-dev/sys/rpc
Rick Macklem 3144f81221 Fix upcall races in the client side krpc. For the client side upcall,
holding SOCKBUF_LOCK() isn't sufficient to guarantee that there is
no upcall in progress, since SOCKBUF_LOCK() is released/re-acquired
in the upcall. An upcall reference counter was added to the upcall
structure that is incremented at the beginning of the upcall and
decremented at the end of the upcall. As such, a reference count == 0
when holding the SOCKBUF_LOCK() guarantees there is no upcall in
progress. Add a function that is called just after soupcall_clear(),
which waits until the reference count == 0.
Also, move the mtx_destroy() down to after soupcall_clear(), so that
the mutex is not destroyed before upcalls are done.

Reviewed by:	dfr, jhb
Tested by:	pho
Approved by:	kib (mentor)
2009-06-04 14:49:27 +00:00
..
rpcsec_gss Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
auth_none.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
auth_unix.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
auth.h Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
authunix_prot.c Place hostnames and similar information fully under the prison system. 2009-05-29 21:27:12 +00:00
clnt_dg.c Fix upcall races in the client side krpc. For the client side upcall, 2009-06-04 14:49:27 +00:00
clnt_rc.c Use the correct creds when reconnecting so that we have enough privilege to 2009-02-05 11:48:10 +00:00
clnt_stat.h Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
clnt_vc.c Fix upcall races in the client side krpc. For the client side upcall, 2009-06-04 14:49:27 +00:00
clnt.h Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
getnetconfig.c Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
inet_ntop.c Minor changes to improve compatibility with older FreeBSD releases. 2008-03-28 09:50:32 +00:00
inet_pton.c Minor changes to improve compatibility with older FreeBSD releases. 2008-03-28 09:50:32 +00:00
netconfig.h Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
nettype.h Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
pmap_prot.h Rename RPC's 'struct pmap' to 'struct portmap' to avoid confusing it with 2008-08-25 09:36:17 +00:00
replay.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
replay.h Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
rpc_callmsg.c Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
rpc_com.h Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
rpc_generic.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
rpc_msg.h Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
rpc_prot.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
rpc.h Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
rpcb_clnt.c It may be #if 0'd out code, but change a varname to not shadow a global. 2008-06-29 01:04:48 +00:00
rpcb_clnt.h Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
rpcb_prot.c Rename RPC's 'struct pmap' to 'struct portmap' to avoid confusing it with 2008-08-25 09:36:17 +00:00
rpcb_prot.h Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
rpcm_subs.h
rpcsec_gss.h Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
svc_auth_unix.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
svc_auth.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
svc_auth.h Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
svc_dg.c Rework socket upcalls to close some races with setup/teardown of upcalls. 2009-06-01 21:17:03 +00:00
svc_generic.c Implement support for RPCSEC_GSS authentication to both the NFS client 2008-11-03 10:38:00 +00:00
svc_vc.c Fix two races in the server side krpc w.r.t upcalls: 2009-06-04 14:13:06 +00:00
svc.c Fix two races in the server side krpc w.r.t upcalls: 2009-06-04 14:13:06 +00:00
svc.h Fix two races in the server side krpc w.r.t upcalls: 2009-06-04 14:13:06 +00:00
types.h Add the new kernel-mode NFS Lock Manager. To use it instead of the 2008-03-26 15:23:12 +00:00
xdr.h fix xdrmem_control to be safe in an if statement 2009-05-30 22:23:58 +00:00