Commit Graph

48 Commits

Author SHA1 Message Date
Gabriel Oginski 45207e0fb2 wireguard: fix dereferences null pointer
Type: fix

Fixed coverity-issue CID 248517.
Originally possible passing null pointer to one function and directly
dereferences it.
This patch fixes the issue by add a new condition to check this
pointer.

Change-Id: If506abaf08c9f003860b641971af291f68613c18
Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
2022-02-23 09:15:12 +00:00
Jon Loeliger d9d77076b0 wireguard: prevent stacksmashing on poorly formed base64 keys
Integer math on 32 bytes of base64 data might yield 33 bytes
of data in some poorly formed user input of private key values.
Rather than smashing the stack (detected) and aborting, simply
allow for the possible yet irrelevant 33-rd byte of data.

Type: fix
Fixes: edca1325cf
Change-Id: I42acfbf3e8fbb3d517e21c53d4f80459d4800e9d
Signed-off-by: Jon Loeliger <jdl@netgate.com>
2022-02-22 18:21:41 +00:00
Gabriel Oginski c810c33f84 wireguard: fix passing null pointer
Type: fix

Fixed coverity-issue CID 248517.
Originally possibly passing null pointer to one function and
directly dereferences it.
This patch fixes the problem by add a new condition.

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: I02fc6fb5d1cfd6138ea4ba2b1946fd8a7ef34d3b
2022-02-18 09:50:41 +00:00
Jon Loeliger 2273ffd878 wireguard: Fix wireguard device name to use user-instance
If the user supplies an instance number when creating a wireguard
interface, it should be used in the device name.  If no user-instance
is given, the device instnce (tunnel number) is used.

For example:
    vpp# wireguard create instance 17 listen-port 23023 src 1.2.3.4
            private-key MDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTY=
    wg17

Type: fix
Fixes: edca1325cf
Signed-off-by: Jon Loeliger <jdl@netgate.com>
Change-Id: Ibf51868bf7b4b9e8a3f85557d05667207873bc91
2022-02-17 20:54:10 +00:00
Neale Ranns f7040f01a5 tcp: Do not include the tcp_packet.h file in the ip4_packet.h
Type: refactor

IP4 does not depend on TCP (it's the other way around).
This upside down dependency leads to some nasty circular includes when trying to use ip46_address.h in interface.h

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: I4a1bd21543b08b9c1cf1e5563da738414734a878
2022-02-15 09:02:27 +00:00
Gabriel Oginski ffd9057493 wireguard: fix passing argument
Fixed coverity-issue CID 248456.
Originally passing argument of type "uint64_t *" to function:
"memcopy_s_inline".
This patch fixes the problem by changing type of passing argument and
make a portable assumption.

Type: fix

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: I17e4583a05ea1263e4d8a4acc9949454e5fd92c0
2022-01-24 14:54:07 +01:00
Gabriel Oginski 77e69ae2d1 wireguard: add async mode for decryption packets
Originally wireguard doesn't support async mode for decryption packets.

This patch add async mode for decryption in wireguard.
In addition, it contains some performance improvement such as
prefetching packet header and reducing the number of current time
function calls.

Type: improvement

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: Ieba6ae0078f3ff140c05b517891afb57232b3b7d
2022-01-21 15:44:39 +00:00
Gabriel Oginski 492d7790ff wireguard: add async mode for encryption packets
Originally wireguard doesn't support async mode for encryption packets.

This patch add async mode for encryption in wireguard and also adds
support chacha20-poly1305 algorithm in cryptodev for async handler.
In addition it contains new command line to activate async mode for wireguard:
  set wireguard async mode on|off

and also add new command to check active mode for wireguard:
  show wireguard mode

Type: improvement

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: I141d48b42ee8dbff0112b8542ab5205268089da6
2022-01-21 14:26:53 +00:00
Gabriel Oginski 8ca08496a4 wireguard: add burst mode
Originally wireguard does packet by packet encryption and decryption.

This patch adds burst mode for encryption and decryption packets. In
addition, it contains some performance improvement such as prefetching
packet header and reducing the number of current time function calls.

Type: improvement

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: I04c7daa9b6dc56cd15c789661a64ec642b35aa3f
2022-01-20 14:32:27 +00:00
Miroslav Miklus 7dc6f7fb49 wireguard: fix 'wireguard add peer' cli behavior
- change 'port' to 'dst-port' to make the input self-explanatory
- add empty spaces to short help

Type: fix

Signed-off-by: Miroslav Miklus <miroslav.miklus@pantheon.tech>
Change-Id: I74c783e6e8629e61b1c100e9355d09cf5e35a750
2022-01-05 09:51:29 +00:00
Gabriel Oginski f33979ba88 wireguard: add local variable in handshake process
Originally handshake process gets pointer to value of index peer.
In the meantime this pointer can be invalid due to resize hash table
for wireguard and passed poison value to another function.

The fixes add local variable to keep index of peer instead of value
from pointer.

Type: fix

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: I1b2535c44b4f987d19077c75c778aaa5ed71a457
2021-11-22 15:28:31 +00:00
Neale Ranns 6fdcc3daa4 fib: Don't use [midchain] adjacencies to change an interface's feature arc
Type: fix

Using the adjacency to modify the interface's feature arc doesn't work, since there are potentially more than one adj per-interface.
Instead have the interface, when it is created, register what the end node of the feature arc is. This end node is then also used as the interface's tx node (i.e. it is used as the adjacency's next-node).

rename adj-midhcain-tx as 'tunnel-output', that's a bit more intuitive.

There's also a fix in config string handling to:
 1- prevent false sharing of strings when the end node of the arc is different.
 2- call registered listeners when the end node is changed

For IPSec the consequences are that one cannot provide per-adjacency behaviour using different end-nodes - this was previously done for the no-SA and an SA with no protection. These cases are no handled in the esp-encrypt node.

Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: If3a83d03a3000f28820d9a9cb4101d244803d084
2021-11-19 14:41:28 +00:00
Gabriel Oginski 4739c8833e wireguard: reduce memcopy and prefetch header
Originally wireguard implementation does memory copy of the whole
packet in encryption and decryption.

This patch removes unnecessary packet copy in wireguard. In addition,
it contains some performance improvement such as prefetching header
and deleting unnecessary lock and unlock for decryption.

Type: improvement

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: I1fe8e54d749e6922465341083b448c842e2b670f
2021-11-03 16:04:00 +00:00
Ray Kinsella 064b77c742 build: remove unnecessary executable bits
Run 'find src -executable -type f', remove unnecessary executable bits from the
source tree.

Type: refactor

Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
Change-Id: I070e22c8fb2ef8712bc3ea620727ee5ab3d9a9fb
2021-11-02 22:26:34 +00:00
Nathan Skrzypczak f47122e07e docs: convert plugins doc md->rst
Type: improvement

Change-Id: I7e821cce1feae229e1be4baeed249b9cca658135
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
2021-10-13 23:22:20 +00:00
Artem Glazychev adf1497ee0 wireguard: peers dump fix
Type: fix

Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: I4450b8c8b50a3be8d6a399f6a58bc0e8eb500b28
2021-10-07 15:38:50 +00:00
Artem Glazychev dd630d15d3 wireguard: add events for peer
we can receive events from peer about its state:
-WIREGUARD_PEER_STATUS_DEAD
-WIREGUARD_PEER_ESTABLISHED

Type: improvement
Change-Id: Ide83fbe2cfafa79ded5bcf3f6a884c26a7583db0
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
2021-10-06 21:32:33 +00:00
Artem Glazychev 7dd3b5b5e3 wireguard: add ipv6 support
Type: improvement
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: If1a7e82ce163c4c4acaa5acf45ad2b88371396f6
2021-10-06 17:57:46 +00:00
Artem Glazychev 9e24f7eb91 wireguard: use the same udp-port for multi-tunnel
now we can reuse udp-port for many wireguard interfaces

Type: improvement
Change-Id: I14b5a9dbe917d83300ccb4d6907743d88355e5c5
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
2021-10-04 16:21:34 +00:00
Artem Glazychev de3caf37c6 wireguard: move adjacency processing from wireguard_peer to wireguard_interface
now we should add routes manually

Type: improvement
Change-Id: I877511a18854efdfad02939267d38a216b2ccec3
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
2021-09-30 14:15:58 +00:00
Aloys Augustin 87f478be88 wireguard: fix wg-output-tun feature configuration
The removed code caused the feature to be wrongly removed on the wg
interface.

Type: fix
Signed-off-by: Aloys Augustin <aloaugus@cisco.com>
Change-Id: I998e01ec231527128eaeae78bcc7576ac00e5b12
2021-09-23 12:16:03 +00:00
Gabriel Oginski 078d258034 wireguard: add flag to check hmac for decryption
Type: fix

Originally the decryption doesn't check the hmac for chacha20-poly1305.

This patch fixes the problem by adding flag to crypto op to check hmac.

Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com>
Change-Id: I63e06fc011b288b1c9dc1b96a92923f224ef656b
2021-08-13 08:36:09 +00:00
Klement Sekera efd4d70210 bfd: use vnet crypto
Type: improvement

Change-Id: I873a99c1258a97ed5ed195b9756e8302f865e7f0
Signed-off-by: Klement Sekera <ksekera@cisco.com>
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2021-05-21 21:06:34 +00:00
Damjan Marion 9e7a0b48fe vlib: pass node runtime to vlib_buffer_enqueue_to_thread()
Mechanical change for patch following this one...

Type: improvement
Change-Id: Iee12f3a8851f35569e6c039494a94fc36e83d20f
Signed-off-by: Damjan Marion <damarion@cisco.com>
2021-05-14 15:56:44 +00:00
Dave Wallace eddd8e3588 tests: move test source to vpp/test
- Generate copyright year and version
  instead of using hard-coded data

Type: refactor

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: I6058f5025323b3aa483f5df4a2c4371e27b5914e
2021-05-13 09:33:06 +00:00
Klement Sekera 8d8150262b tests: add support for worker awareness
VppTestCase now has vpp_worker_count property set to number of workers.
This can be overriden by child classes. Also overriden by
VPP_WORKER_CONFIG variable for legacy reasons.

Type: improvement
Change-Id: Ic328bacb9003ddf9e92815767653bd362aa7f086
Signed-off-by: Klement Sekera <ksekera@cisco.com>
2021-03-20 01:14:20 +00:00
Artem Glazychev cb1c4902bb wireguard: coverity fix
explicit null dereferenced

Type: fix

Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: Id1e4b0e048dbd0a68063c63374172ab6d3653aff
2021-02-24 14:22:49 +00:00
Mohsin Kazmi 6809538e64 vlib: refactor checksum offload support
Type: refactor

This patch refactors the offload flags in vlib_buffer_t.
There are two main reasons behind this refactoring.
First, offload flags are insufficient to represent outer
and inner headers offloads. Second, room for these flags
in first cacheline of vlib_buffer_t is also limited.

This patch introduces a generic offload flag in first
cacheline. And detailed offload flags in 2nd cacheline
of the structure for performance optimization.

Change-Id: Icc363a142fb9208ec7113ab5bbfc8230181f6004
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2021-02-15 20:32:56 +00:00
Mohammed Hawari d5d253d618 wireguard: testing alternative timer dispatch
Change-Id: I645bb0a31b333a6160c74987dddb3fb50ff154d8
Type: improvement
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
2021-02-11 08:38:48 +00:00
Andrew Yourtchenko 3e72083b45 docs: fix up the markdown
Type: docs
Change-Id: Ia541839e1f1ceddfae4579dece43b9cc820702e2
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
(cherry picked from commit de569048a5)
2021-02-01 15:34:39 +00:00
Damjan Marion b2c31b685f misc: move to new pool_foreach macros
Type: refactor
Change-Id: Ie67dc579e88132ddb1ee4a34cb69f96920101772
Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-12-14 12:14:21 +00:00
Nathan Skrzypczak d9ed3f2d8a wireguard: run feature after gso
This allows using GSO with wireguard

Type: fix

Change-Id: Id00a1425f9d9412aca9f259beda55a46bf5595d7
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
2020-12-06 20:04:15 +00:00
Nathan Skrzypczak de22111b52 wireguard: return public key in api
Type: feature

Change-Id: Iacb0da8bc738ed400678f9bb40e70e0031c6588e
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
2020-12-01 16:49:32 +00:00
Florin Coras b040f98a88 misc: minimize dependencies on udp.h
Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Id13f33843b230a1d169560742c4f7b2dc17d8718
2020-10-21 10:56:34 +00:00
Benoît Ganne 2531d50101 wireguard: reset secret data before freeing it
Type: fix

Change-Id: I880bdd55ae5da0b9775a3fb548d44512348a7bc6
Signed-off-by: Benoît Ganne <bganne@cisco.com>
2020-10-20 16:24:31 +00:00
Dave Barach 6754a16ca3 wireguard: park the timer process
Until the feature is configured. It would make sense to push more of
the feature init code into the newly-added wg_feature_init()
function. This patch fixes a severe hemorrhoid.

Type: improvement

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I87095575363baa41407dd52492159a7b8c2899e7
2020-10-09 17:20:28 +00:00
Neale Ranns 6e366be38f misc: Purge unused pg includes
Type: style

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I26a19e42076e031ec5399d5ca05cb49fd6fbe1cd
2020-10-07 16:05:16 +00:00
Artem Glazychev 124d5e02b3 wireguard: fix udp-port registration
Type: fix

Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: I698ef299316004b797da1e74b64d067caac4bd2d
2020-09-30 00:16:53 +00:00
Artem Glazychev a880b276d9 wireguard: fix license headers
Type: fix

Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: If5cc8894e0d1785dd04ab1e460e017580c9b41ce
2020-09-29 09:02:02 +00:00
Artem Glazychev 8bac1e8c86 wireguard: fix indents
Type: fix

Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: I84cd7b08eac62160cf407409d32dd40cec7ae9d6
2020-09-29 09:01:40 +00:00
Artem Glazychev 6bdfcd429f wireguard: readme fix
Type: fix

Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Change-Id: I0080a158fc3e17dfdd360f6ba164e3bfa3d585a6
2020-09-29 09:01:20 +00:00
Artem Glazychev 4977434354 wireguard: coverity fix
Type: fix

Change-Id: Ib69b9d83a77d315368ce091085b6bc2d26994282
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
2020-09-24 11:19:10 +00:00
Artem Glazychev 8eb69407c8 wireguard: add handoff node
All timer and control plane functions happen from main thread

Type: fix

Change-Id: I4fc333c644485cd17e6f426493feef91688d9b24
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
2020-09-23 10:11:13 +00:00
Neale Ranns 76770fd659 wireguard: coverity fixes
Type: fix

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: Ib1eabbc87a573c660ac251602d631f167928259b
2020-09-14 18:58:03 +00:00
Neale Ranns a26b0d11e9 wireguard: increase FIB source priority
Type: fix

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: Icc1c458474d357c7d9b3b4df1897500de0c314a1
2020-09-14 13:14:43 +00:00
Neale Ranns d75a2d12c4 wireguard: Fix for tunnel encap
Type: fix

add UT for sneding handshale init and transport packets

Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: Iab1ed8864c666d5a0ae0b2364a9ca4de3c8770dc
2020-09-12 08:20:59 +00:00
Artem Glazychev cf527882e2 wireguard: fix handshake procedure
Type: fix

Change-Id: I96e8c5c9c792b1d9aefd39ce3e240d220827b7d1
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
2020-09-10 16:02:24 +00:00
Artem Glazychev edca1325cf wireguard: initial implementation of wireguard protocol
Type: feature

The main information about plugin you can see in README.md

vpp# wireguard ?
  wireguard create                         wireguard create listen-port <port> private-key <key> src <IP> [generate-key]
  wireguard delete                         wireguard delete <interface>
  wireguard peer add                       wireguard peer add <wg_int> public-key <pub_key_other>endpoint <ip4_dst> allowed-ip <prefix>dst-port [port_dst] persistent-keepalive [keepalive_interval]
  wireguard peer remove                    wireguard peer remove <index>

Change-Id: I85eb0bfc033ccfb2045696398d8a108b1c64b8d9
Signed-off-by: Artem Glazychev <artem.glazychev@xored.com>
Signed-off-by: Damjan Marion <damarion@cisco.com>
Signed-off-by: Jim Thompson <jim@netgate.com>
Signed-off-by: Neale Ranns <nranns@cisco.com>
Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-09-09 11:57:48 +00:00