Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 16 May 2020 02:34:57 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r361100 - projects/nfs-over-tls/sys/rpc/rpcsec_tls
Message-ID:  <202005160234.04G2Yv1t099463@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005160234.04G2Yv1t099463>