HomeFreeBSD

if_wg: import latest fixup work from the wireguard-freebsd project

Description

if_wg: import latest fixup work from the wireguard-freebsd project

This is the culmination of about a week of work from three developers to
fix a number of functional and security issues. This patch consists of
work done by the following folks:

  • Jason A. Donenfeld <Jason@zx2c4.com>
  • Matt Dunwoodie <ncon@noconroy.net>
  • Kyle Evans <kevans@FreeBSD.org>

Notable changes include:

  • Packets are now correctly staged for processing once the handshake has completed, resulting in less packet loss in the interim.
  • Various race conditions have been resolved, particularly w.r.t. socket and packet lifetime (panics)
  • Various tests have been added to assure correct functionality and tooling conformance
  • Many security issues have been addressed
  • if_wg now maintains jail-friendly semantics: sockets are created in the interface's home vnet so that it can act as the sole network connection for a jail
  • if_wg no longer fails to remove peer allowed-ips of 0.0.0.0/0
  • if_wg now exports via ioctl a format that is future proof and complete. It is additionally supported by the upstream wireguard-tools (which we plan to merge in to base soon)
  • if_wg now conforms to the WireGuard protocol and is more closely aligned with security auditing guidelines

Note that the driver has been rebased away from using iflib. iflib
poses a number of challenges for a cloned device trying to operate in a
vnet that are non-trivial to solve and adds complexity to the
implementation for little gain.

The crypto implementation that was previously added to the tree was a
super complex integration of what previously appeared in an old out of
tree Linux module, which has been reduced to crypto.c containing simple
boring reference implementations. This is part of a near-to-mid term
goal to work with FreeBSD kernel crypto folks and take advantage of or
improve accelerated crypto already offered elsewhere.

There's additional test suite effort underway out-of-tree taking
advantage of the aforementioned jail-friendly semantics to test a number
of real-world topologies, based on netns.sh.

Also note that this is still a work in progress; work going further will
be much smaller in nature.

MFC after: 1 month (maybe)

Details

Provenance
kevansAuthored on Mar 15 2021, 2:25 AM
Parents
rG3e5e9939cda3: ddb: enable the use of ^C and ^S/^Q
Branches
Unknown
Tags
Unknown