FreeBSD src
Go to file
Rick Macklem ab0c29af05 Add TLS support to the kernel RPC.
An internet draft titled "Towards Remote Procedure Call Encryption By Default"
describes how TLS is to be used for Sun RPC, with NFS as an intended use case.
This patch adds client and server support for this to the kernel RPC,
using KERN_TLS and upcalls to daemons for the handshake, peer reset and
other non-application data record cases.

The upcalls to the daemons use three fields to uniquely identify the
TCP connection. They are the time.tv_sec, time.tv_usec of the connection
establshment, plus a 64bit sequence number. The time fields avoid problems
with re-use of the sequence number after a daemon restart.
For the server side, once a Null RPC with AUTH_TLS is received, kernel
reception on the socket is blocked and an upcall to the rpctlssd(8) daemon
is done to perform the TLS handshake.  Upon completion, the completion
status of the handshake is stored in xp_tls as flag bits and the reply to
the Null RPC is sent.
For the client, if CLSET_TLS has been set, a new TCP connection will
send the Null RPC with AUTH_TLS to initiate the handshake.  The client
kernel RPC code will then block kernel I/O on the socket and do an upcall
to the rpctlscd(8) daemon to perform the handshake.
If the upcall is successful, ct_rcvstate will be maintained to indicate
if/when an upcall is being done.

If non-application data records are received, the code does an upcall to
the appropriate daemon, which will do a SSL_read() of 0 length to handle
the record(s).

When the socket is being shut down, upcalls are done to the daemons, so
that they can perform SSL_shutdown() calls to perform the "peer reset".

The rpctlssd(8) and rpctlscd(8) daemons require a patched version of the
openssl library and, as such, will not be committed to head at this time.

Although the changes done by this patch are fairly numerous, there should
be no semantics change to the kernel RPC at this time.
A future commit to the NFS code will optionally enable use of TLS for NFS.
2020-08-22 03:57:55 +00:00
bin ls(1): Update POSIX conformance from 2001 to 2008 2020-08-21 06:20:11 +00:00
cddl Fix a typo in r364438. 2020-08-20 20:11:58 +00:00
contrib Merge commit 95e18b2d9d5f from llvm git (by Kang Zhang): 2020-08-21 10:06:01 +00:00
crypto sshd: allow UseBlocklist alias for UseBlacklist 2020-07-29 00:34:24 +00:00
etc Merge ^/head r364082 through r364250. 2020-08-15 11:49:31 +00:00
gnu Remove now-unused GNU as build infrastructure 2020-06-07 13:53:23 +00:00
include <regex.h>: reserve a regcomp field for REG_POSIX 2020-07-31 12:40:31 +00:00
kerberos5 Update Makefile.depend files 2019-12-11 17:37:53 +00:00
lib veloader: insist on verifying .4th .lua etc 2020-08-21 00:27:06 +00:00
libexec Don't explicitly specify c99 or gnu99 as the default is now gnu99. 2020-08-17 05:57:02 +00:00
release pkgbase: Replace / with | for PKG_WWW 2020-08-11 10:07:59 +00:00
rescue Move ifconfig SFP status functionality into libifconfig 2020-08-09 16:27:28 +00:00
sbin ipfw(8): Fix typo in man page 2020-08-21 17:45:17 +00:00
secure Fix a typo in the cpp macro defined for PIC. 2020-08-13 20:28:35 +00:00
share Reference spi(8) from spigen.4 2020-08-21 09:50:03 +00:00
stand When we have a command returned by zfs_nextboot() that is longer 2020-08-20 20:31:47 +00:00
sys Add TLS support to the kernel RPC. 2020-08-22 03:57:55 +00:00
targets Add WITH_CLANG_FORMAT option 2020-06-24 17:03:42 +00:00
tests fusefs: fix the FUSE_FORGET unit test after r364064 2020-08-11 01:09:06 +00:00
tools Update OptionalObsoleteFiles.inc for added and removed clang 11.0.0 2020-08-15 12:24:05 +00:00
usr.bin uptime(1): Add EXAMPLES section 2020-08-18 16:58:37 +00:00
usr.sbin Clean up spi.8 2020-08-21 09:48:00 +00:00
.arcconfig
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.cirrus.yml Cirrus-CI: increase timeout to 120m 2020-02-19 15:56:40 +00:00
.clang-format Clang-format: Avoid hardcoded LLVM include-order style 2020-06-24 23:22:36 +00:00
.gitattributes Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitignore .gitignore: Add LINT kernel configurations generated into SRCDIR 2019-08-10 18:22:22 +00:00
COPYRIGHT Happy New Year 2020! 2019-12-31 16:01:36 +00:00
LOCKS LOCKS: update current locks 2018-06-09 03:08:04 +00:00
MAINTAINERS Update bhyve maintainers. 2020-06-26 06:11:50 +00:00
Makefile Add a USE_GCC_TOOLCHAINS knob to make universe. 2020-08-17 20:11:43 +00:00
Makefile.inc1 After the clang/llvm version 11 import LLD_VERSION is no longer used 2020-08-21 22:31:45 +00:00
Makefile.libcompat Stop building libl and liby 2020-03-26 08:23:09 +00:00
Makefile.sys.inc
ObsoleteFiles.inc Add ufm(4) to ObsoleteFiles.inc 2020-08-20 19:14:53 +00:00
README README: add generic notes about GENERIC and NOTES 2018-06-17 19:44:24 +00:00
README.md README: add generic notes about GENERIC and NOTES 2018-06-17 19:44:24 +00:00
RELNOTES Mention the new implementation of bc and dc which has become the default 2020-08-08 19:48:15 +00:00
UPDATING Add an entry to UPDATING for r364330. 2020-08-18 02:02:36 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html, and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information, including setting make(1) variables.

Source Roadmap:

bin		System/user commands.

cddl		Various commands and libraries under the Common Development
		and Distribution License.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

stand		Boot loader sources.

sys		Kernel sources.

sys/<arch>/conf Kernel configuration files. GENERIC is the configuration
		used in release builds. NOTES contains documentation of
		all possible entries.

tests		Regression tests which can be run by Kyua.  See tests/README
		for additional information.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html