svn commit: r361100 - projects/nfs-over-tls/sys/rpc/rpcsec_tls
Rick Macklem
rmacklem at FreeBSD.org
Sat May 16 02:34:57 UTC 2020
Author: rmacklem
Date: Sat May 16 02:34:56 2020
New Revision: 361100
URL: https://svnweb.freebsd.org/changeset/base/361100
Log:
Add fdrop()s to the rpctls syscall for the "fp" reference.
Without these fdrop()s, the daemons leaked file descriptors and
it also left closed TCP sockets lying around.
I didn't realize that falloc() returns with two references, one for
the "fd" and one for the "fp".
Modified:
projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c
Modified: projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c
==============================================================================
--- projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c Sat May 16 02:29:10 2020 (r361099)
+++ projects/nfs-over-tls/sys/rpc/rpcsec_tls/rpctls_impl.c Sat May 16 02:34:56 2020 (r361100)
@@ -240,6 +240,7 @@ printf("falloc=%d fd=%d\n", error, fd);
rpctls_connect_so = NULL;
mtx_unlock(&rpctls_connect_lock);
finit(fp, FREAD | FWRITE, DTYPE_SOCKET, so, &socketops);
+ fdrop(fp, td); /* Drop fp reference. */
td->td_retval[0] = fd;
}
printf("returning=%d\n", fd);
@@ -260,6 +261,7 @@ printf("srv falloc=%d fd=%d\n", error, fd);
rpctls_server_so = NULL;
mtx_unlock(&rpctls_server_lock);
finit(fp, FREAD | FWRITE, DTYPE_SOCKET, so, &socketops);
+ fdrop(fp, td); /* Drop fp reference. */
td->td_retval[0] = fd;
}
printf("srv returning=%d\n", fd);
More information about the svn-src-projects
mailing list