Project

General

Profile

Version 5.5.3 » History » Version 2

Tobias Brunner, 26.05.2017 18:34

1 1 Tobias Brunner
h1. Version 5.5.3
2 1 Tobias Brunner
3 2 Tobias Brunner
* The behavior during IKEv2 CHILD_SA rekeying has been changed in order to avoid
4 2 Tobias Brunner
  traffic loss. When responding to a @CREATE_CHILD_SA@ request to rekey a CHILD_SA
5 2 Tobias Brunner
  the responder already has everything available to install and use the new CHILD_SA.
6 2 Tobias Brunner
  However, this could lead to lost traffic as the initiator won't be able to process
7 2 Tobias Brunner
  inbound packets until it processed the @CREATE_CHILD_SA@ response and updated the
8 2 Tobias Brunner
  inbound SA.  To avoid this the responder now only installs the new inbound SA and
9 2 Tobias Brunner
  delays installing the outbound SA until it receives the DELETE for the replaced CHILD_SA.
10 2 Tobias Brunner
11 2 Tobias Brunner
  The messages transporting these DELETEs could reach the peer before packets sent
12 2 Tobias Brunner
  with the deleted outbound SAs reach it.  To reduce  the chance of traffic loss due
13 2 Tobias Brunner
  to this the inbound SA of the replaced CHILD_SA is not removed for a configurable
14 2 Tobias Brunner
  amount of seconds (_charon.delete_rekeyed_delay_) after the DELETE has been processed.
15 2 Tobias Brunner
16 2 Tobias Brunner
* The code base has been ported to Apple's ARM64 iOS platform, which required several
17 2 Tobias Brunner
  changes regarding the use of variadic functions.  This was necessary because the calling
18 2 Tobias Brunner
  conventions for variadic and regular functions are "different there":https://developer.apple.com/library/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html.
19 2 Tobias Brunner
  This means that assigning a non-variadic function to a variadic function pointer, as we
20 2 Tobias Brunner
  did with our @enumerator_t::enumerate()@ implementations and several callbacks, will
21 2 Tobias Brunner
  result in crashes as the called function accesses the arguments differently than the
22 2 Tobias Brunner
  caller provided them.  To avoid this issue the @enumerator_t@ interface has been changed
23 2 Tobias Brunner
  and the signature of the callback functions for @enumerator_create_filter()@ and two
24 2 Tobias Brunner
  methods on @linked_list_t@ have been changed. Refer to the *developer notes* below
25 2 Tobias Brunner
  for details.
26 2 Tobias Brunner
27 2 Tobias Brunner
* Adds support for [[fuzzing]] the certificate parser provided by the default plugins
28 2 Tobias Brunner
  (x509, pem, gmp etc.) on Google's "OSS-Fuzz":https://github.com/google/oss-fuzz infrastructure (or generally with
29 2 Tobias Brunner
  libFuzzer). Several issues found while fuzzing these plugins were fixed.
30 2 Tobias Brunner
    
31 2 Tobias Brunner
* Two new options have been added to charon's [[retransmission]] settings:
32 2 Tobias Brunner
  _retransmit_limit_ and _retransmit_jitter_.  The former adds an upper limit to the
33 2 Tobias Brunner
  calculated retransmission timeout, the latter randomly reduces it.
34 2 Tobias Brunner
  Refer to [[Retransmission]] for details.
35 2 Tobias Brunner
36 2 Tobias Brunner
* A bug in [[swanctl]]'s @--load-creds@ command was fixed that caused unencrypted
37 2 Tobias Brunner
  private keys to get unloaded if the command was called multiple times.
38 2 Tobias Brunner
  The _load-key_ [[VICI]] command now returns the key ID of the loaded key on success.
39 2 Tobias Brunner
40 2 Tobias Brunner
* The credential manager now enumerates local credential sets before global ones.
41 2 Tobias Brunner
  This means certificates supplied by the peer will now be preferred over certificates
42 2 Tobias Brunner
  with the same identity that may be locally stored (e.g. in the certificate cache).
43 2 Tobias Brunner
44 2 Tobias Brunner
* Adds support for hardware offload of IPsec SAs as introduced by Linux 4.11 for
45 2 Tobias Brunner
  specific hardware that supports this.
46 2 Tobias Brunner
47 2 Tobias Brunner
* To announce support for IKE fragmentation but not actively fragment IKE messages
48 2 Tobias Brunner
  the new _accept_ option for the _fragmentation_ setting may be used.
49 2 Tobias Brunner
50 2 Tobias Brunner
* If _charon.plugins.socket-default.set_sourceif_ is enabled the _socket-default_ plugin
51 2 Tobias Brunner
  sets the outbound interface via IP_PKTINFO/IN6_PKTINFO.  This is usually not required
52 2 Tobias Brunner
  but could be used in special scenarios, e.g. to use IPv6 link-local addresses as
53 2 Tobias Brunner
  tunnel endpoints.
54 2 Tobias Brunner
55 2 Tobias Brunner
* Add support for @SADB_X_EXT_NEW_ADDRESS_SRC|DST@ extensions for PF_KEYv2's
56 2 Tobias Brunner
  @SADB_UPDATE@ message, which upcoming FreeBSD kernels will support for updating
57 2 Tobias Brunner
  IP addresses of existing SAs.
58 2 Tobias Brunner
59 2 Tobias Brunner
* The value of _charon.plugins.kernel-netlink.xfrm_acq_expires_ is now determined
60 2 Tobias Brunner
  automatically based on the configured [[retransmission]] settings.
61 2 Tobias Brunner
62 2 Tobias Brunner
* If updating the inbound SA fails the _kernel-netlink_ plugin now tries to add it, which
63 2 Tobias Brunner
  could be useful if the SPI already expired after lots of retransmits of several exchanges.
64 2 Tobias Brunner
65 2 Tobias Brunner
* _charon-nm_ and the [[NetworkManager]] plugin now support customizing the IKE and
66 2 Tobias Brunner
  ESP proposals.
67 2 Tobias Brunner
68 2 Tobias Brunner
* With the _sha_256_96_ compatibility option it's possible to locally configure 96-bit truncation
69 2 Tobias Brunner
  for HMAC_SHA256 (the correct truncation is 128 bit) when negotiated using the official
70 2 Tobias Brunner
  algorithm identifier (12).  This is only useful for compatibility with peers that incorrectly
71 2 Tobias Brunner
  use this shorter truncation as the actual truncation length is not negotiated.
72 2 Tobias Brunner
73 2 Tobias Brunner
* The removal of all online leases by the [[attrsql|attr-sql]] plugin at startup may now be disabled
74 2 Tobias Brunner
  to share the database between multiple instances.
75 2 Tobias Brunner
76 2 Tobias Brunner
* The [[ipsecpki|pki]] tool loads the _curve25519_ plugin by default.
77 2 Tobias Brunner
78 2 Tobias Brunner
* When building the libraries monolithically and statically the plugin constructors are now
79 2 Tobias Brunner
  hard-coded in each library so the plugin code is not removed by the linker because it
80 2 Tobias Brunner
  thinks none of their symbols are ever referenced.  This allows building an almost stand-alone
81 2 Tobias Brunner
  static version of e.g. charon when building with @--enable-monolithic --enable-static
82 2 Tobias Brunner
  --disable-shared@ (without @--disable-shared@ libtool will build a version that still links
83 2 Tobias Brunner
  the libraries dynamically, which might save some disk space if it's not necessary to link
84 2 Tobias Brunner
  them statically, however, using @--enable-monolithic@ might be enough in that case).
85 2 Tobias Brunner
  External libraries (e.g. gmp or openssl) are not linked statically this way, though.
86 2 Tobias Brunner
87 2 Tobias Brunner
88 2 Tobias Brunner
* Notes for developers:
89 2 Tobias Brunner
90 2 Tobias Brunner
  * *child_sa_t*: The API used for installing policies and SAs has been changed (traffic
91 2 Tobias Brunner
    selectors are now only set once, outbound SAs and policies may be installed/uninstalled
92 2 Tobias Brunner
    separately).
93 2 Tobias Brunner
  * *enumerator_t*: A new mandatory method, venumerate(), has been added that takes
94 2 Tobias Brunner
    a @va_list@ with the arguments provided while enumerating.  @enumerate()@ is replaced
95 2 Tobias Brunner
    with a generic implementation that prepares a @va_list@ and calls the enumerator's
96 2 Tobias Brunner
    @venumerate()@ implementation.  As this allows passing the arguments of one enumerator
97 2 Tobias Brunner
    to another it avoids the five pointer hack previously used by @enumerator_create_nested()@
98 2 Tobias Brunner
    and @enumerator_create_cleaner()@. To simplify the implementation of @venumerate()@ a
99 2 Tobias Brunner
    helper macro is provided that assigns values from a given @va_list@ to local variables.
100 2 Tobias Brunner
  * *enumerator_create_filter()*: The signature of the callback has changed significantly.
101 2 Tobias Brunner
    It's now required to enumerate over the original enumerator in the callback itself, as
102 2 Tobias Brunner
    this avoids the previous in/out pointer hack. The arguments to the outer enumerator are
103 2 Tobias Brunner
    provided in a @va_list@.
104 2 Tobias Brunner
  * *linked_list_t*: To avoid the five pointer hack previously used the signatures of the
105 2 Tobias Brunner
    callbacks for @linked_list_t@'s @invoke_function()@ and @find_first()@ methods have been
106 2 Tobias Brunner
    changed to take a @va_list@ as second argument.  For the latter method the return type also
107 2 Tobias Brunner
    changed from @status_t@ to @bool@, which is important as @SUCCESS@ is defined as 0, so checks
108 2 Tobias Brunner
    for @== SUCCESS@ will now fail.