Commit Graph
100 Commits
Author SHA1 Message Date
Tobias Brunner 7433f1672a android: Prevent FD leak from HttpURLConnection
The default is apparently "Connection: keep-alive", which somehow keeps
the socket around, which leaks file descriptors with every connection
that fetches OCSP and/or CRLs.  Over time that could result in the number
of FDs reaching a limit e.g. imposed by FD_SET().

Closes strongswan/strongswan#1160
2022-09-21 15:15:18 +02:00
Tobias Brunner ef68a7056b android: Update dependencies 2022-09-21 15:15:18 +02:00
Tobias Brunner 232623dd44 android: Set compile-/targetSdkVersion to 32 2022-09-21 15:15:18 +02:00
Tobias Brunner 9db90f8c26 android: Fix "Format string ... is not valid format string..." error
The linter complained that two of the strings don't actually contain any
printf-specifiers (i.e. don't expect any arguments) and therefore
shouldn't be used with String.format().
2022-09-21 15:15:18 +02:00
Tobias Brunner 563407e42a android: Mark PendingIntents as immutable via FLAG_IMMUTABLE
Setting this or explicitly FLAG_MUTABLE is required when targeting
Android 12.

References strongswan/strongswan#1151
2022-09-21 15:14:23 +02:00
Tobias Brunner 86b69f26e4 android: Explicitly mark Activities/Services with intent-filter as exported
Required when targeting Android 12.
2022-09-21 13:54:37 +02:00
Tobias Brunner 6ab9297b5d android: Move package namespace declaration from Manifest to build file 2022-09-21 13:54:37 +02:00
Tobias Brunner a09727465c android: Remove unused jni directory spec from sourceSets 2022-09-21 13:54:37 +02:00
Tobias Brunner cd698bf46b android: Update Gradle plugin 2022-09-21 13:54:37 +02:00
Tobias Brunner 357d680649 socket-win: Don't set SO_REUSEADDR on IKE sockets anymore
Same as the change for socket-default in a previous commit.
2022-09-21 13:53:44 +02:00
Tobias Brunner 5f9ad62a81 socket-dynamic: Don't set SO_REUSEADDR on IKE sockets anymore
Same as the previous commit.
2022-09-21 13:53:44 +02:00
Tobias Brunner 83da133712 socket-default: Don't set SO_REUSEADDR on IKE sockets anymore
This was originally required when pluto and charon both bound sockets to
the same port to send messages.  Pluto also received messages on them but
charon didn't and used a raw socket instead.  Since the removal of pluto
we don't need to set this option anymore, which might actually mask
mistakes like running charon and charon-systemd concurrently (that could
result in messages getting sent fine by both daemons but only received
by one).

Note that a failure to create/bind the sockets will not immediately
result in a shutdown of the daemon.  Instead, there will be an error
once the receiver tries to read any messages and also whenever the sender
attempts to send a request.
2022-09-21 13:53:44 +02:00
Tobias Brunner 0da8cae671 Merge branch 'eap-vendor-id'
Changes the type for EAP vendor IDs from uint32_t to pen_t, which has
explicitly been added to represent three-byte IANA-allocated Private
Enterprise Numbers (PEN), which the EAP RFC called "SMI Network
Management Private Enterprise Codes".

References strongswan/strongswan#581
2022-09-21 13:53:44 +02:00
Tobias Brunner cdeb724839 eap: Make sure eap_type_t is large enough to hold vendor-specific types
Unless compiled with `-fshort-enumes` that's usually the case already.
2022-09-21 13:53:44 +02:00
Tobias Brunner 9efd7d7e90 eap: Print vendor (PEN) names for vendor-specific EAP methods 2022-09-21 13:53:44 +02:00
Tobias Brunner f6e6fcd2f6 eap: Use pen_t instead of uint32_t for vendor ID 2022-09-21 13:53:44 +02:00
Tobias Brunner 75d820de8b scepclient: Remove documentation about removal of scepclient
There should be no need for such a persistent documentation on a removed
component in the repository.  The commit history is enough.  And besides
that, there is user-facing documentation about it in the docs and the
changelog/NEWS.
2022-09-20 10:50:36 +02:00
Tobias Brunner 231df029b0 pki: Add SCEP utility functions and enums to Doxygen doc 2022-09-20 10:18:36 +02:00
Tobias Brunner f21ef43b0c vici: Ignore NULL message in raise_event()
There are a lot of calls like this:

  this->dispatcher->raise_event(this->dispatcher, "...", 0,
                                b->finalize(b));

However, if finalize() fails, e.g. because a previous call to add()
failed due to the size limit, it returns NULL.  This then caused a
segmentation fault in raise_event() when it interacted with that value.

Closes strongswan/strongswan#1278
2022-09-20 10:15:13 +02:00
Tobias Brunner 33f5e23c4e Merge branch 'ike-sa-flush'
This fixes a race condition during shutdown between the main thread
flushing the IKE_SA manager and worker threads still creating IKE_SAs.

Closes strongswan/strongswan#1252
2022-09-20 10:09:59 +02:00
Tobias Brunner 2740c50bb8 ike-sa-manager: Make sure flush() removes entries that might get added concurrently
Because flush() has to release the segment locks intermittently, threads
might add new entries (even with the change in the previous commit as the
IKE_SA might already be created, just not registered/checked in yet).

Since those entries are added to the front of the segment lists, the
enumerator in the previous step 2 didn't notice them and did not wait
for them to get checked in.  However, step 3 and 4 then proceeded to
delete and destroy the entry and IKE_SA, which could lead to a crash
once the other thread attempts to check in the already destroyed IKE_SA.

This change combines the three loops of steps 2-4 but then loops over
the whole table until it's actually empty.  This way we wait for and
destroy newly added entries.
2022-09-20 10:06:14 +02:00
Tobias Brunner 6f456afe39 ike-sa-manager: Prevent new IKE_SA from getting created when flush() is called
Without ability to create SPIs, other threads are prevented from creating
new IKE_SAs while we are flushing existing IKE_SAs.  However, there could
still be IKE_SAs already created that might get checked in while the
segments are temporarily unlocked to wait for threads to check existing
SAs in.
2022-09-20 10:04:06 +02:00
Tobias Brunner 69995ed2c4 ike-sa: Always set ike_cfg_t when setting peer_cfg_t
This is more consistent and e.g. allows to properly take into account
some settings that are also relevant during IKE_AUTH (e.g. childless).

We also already use the peer_cfg_t's ike_cfg_t when rekeying,
reauthenticating and reestablishing an IKE_SA (and e.g. for DSCP).

Also changed are some IKEv1 cases where get_ike_cfg() is called before
set_peer_cfg() without taking a reference to the ike_cfg_t that might
get replaced/destroyed (none of the cases were problematic, though, but
it also wasn't necessary to keep the ike_cfg_t around).

Closes strongswan/strongswan#1238
2022-09-20 10:03:02 +02:00
Tobias Brunner 48e9267d7a cred-encoding: Avoid potential use after free when caching encodings
The pattern currently is to call get_cache(), generate the encoding
if that failed and then store it with cache().  The latter adopts the
passed encoding and frees any stored encoding.  However, the latter means
that if two threads concurrently fail to get a cached encoding and then
both generate and store one, one of the threads might use an encoding
that was freed by the other thread.

Since encodings are not expected to change, we can avoid this issue by
not replacing an existing cache entry and instead return that (while
freeing the passed value instead of the cached one).

Closes strongswan/strongswan#1231
2022-09-20 09:53:13 +02:00
Tobias Brunner 724b1a8ae8 kernel-pfkey: Increase debug level of the "querying ..." log messages
References strongswan/strongswan#1271
2022-09-16 16:46:45 +02:00
Tobias Brunner 88c80df6f4 Merge branch 'asan'
Enables AddressSanitizer in most CI builds that don't use leak-detective.
For custom builds it can easily be enabled via --enable-asan.
2022-09-16 15:28:16 +02:00
Tobias Brunner d29af802bb github: Enable AddressSanitizer if leak-detective is disabled
At least for the tests where it is available and works.  It conflicts
with the instrumentation used by the coverage and fuzzing (and possibly
sonarcloud) tests, the toolchain for the Windows builds doesn't seem to
support it, and on FreeBSD the test executables hang due to a
compatibility issue with FreeBSD's qsort(), which has been fixed [1],
but that has not made it into the clang version in the base system.

For the custom OpenSSL build, debug symbols are enabled so we can
suppress some leaks properly.

[1] https://github.com/llvm/llvm-project/issues/46176
2022-09-16 15:26:43 +02:00
Tobias Brunner 8a57c2ab52 configure: Add an option to build with AddressSanitizer 2022-09-15 18:23:57 +02:00
Tobias Brunner c4563abc2e github: Use OpenSSL 3.0.5 for tests 2022-09-15 12:16:12 +02:00
Tobias Brunner a7e8cb8f61 tun-device: Fix compiler warning
Only the second was reported by the compiler (depending on the version
and similarly to the previous commit only with AddressSanitizer active).
The strncpy() call for UTUN_CONTROL_NAME was simply wrong.
2022-09-15 12:16:12 +02:00
Tobias Brunner eab9cd8661 kernel-netlink: Fix compiler warnings with strncpy()
Normally, GCC sees that we terminate the destination with a zero byte.
However, when using `-fsanitize=address`, there seems to be additional
instrumentation code after strncpy() so GCC produces warnings like
these:

‘__builtin_strncpy’ specified bound 16 equals destination size [-Wstringop-truncation]
2022-09-15 12:16:12 +02:00
Tobias Brunner ae9d110dd9 configure: Log if -Werror is enabled 2022-09-15 12:16:12 +02:00
Tobias Brunner c9c8911478 unit-tests: Don't link files from libimcv into the test executable
This causes odr-violation errors with libasan as some symbols will be
defined twice, once in the linked libimcv and once in the test
executable itself.
2022-09-15 12:16:12 +02:00
Tobias Brunner bdc7f84a23 unit-tests: Don't use test data on stack for TLS socket tests
The stack of that function might not be valid anymore once data is read.
2022-09-15 12:16:12 +02:00
Tobias Brunner 80b2c6cdc5 gcrypt: Return correct IV length (0) for ECB mode 2022-09-15 12:16:12 +02:00
Tobias Brunner 7217ff5fc5 aesni: Fix out-of-bound read when loading 192-bit AES keys 2022-09-15 12:16:12 +02:00
Tobias Brunner f2456376ae ike-rekey: Correctly destroy colliding rekey task
Using DESTROY_IF() this way doesn't correctly check if the pointer
is set.

Fixes: 7ffeed01c0 ("ike-rekey: Remove collision task type checks")
2022-09-15 12:16:12 +02:00
Tobias Brunner 5eeeb894d1 test-runner: Clean up collected run times 2022-09-15 12:16:12 +02:00
Tobias Brunner ffada7cb5a pki: Correctly use int as precision specifier when printing PEM certificate 2022-09-14 17:38:59 +02:00
Tobias Brunner 644f74ad8f unit-tests: Add environment variable to only run specific iterations
Helpful when running with increased verbosity and only specific iterations
fail.
2022-09-12 16:13:51 +02:00
Tobias Brunner f4931ce7e6 testing: Add missing kernel config for 5.19
The config went missing when 057b3806aa ("Version bump to 5.9.8dr1")
changed the default kernel version.
2022-09-06 16:56:31 +02:00
Tobias Brunner 55f7268eb1 unit-tests: Let the TLS server thread close its own socket
Closing the socket from the main thread, while the server thread is
still in accept() (or is just about to enter it), seems to
occasionally cause a deadlock on macOS.
2022-09-06 15:40:32 +02:00
Tobias Brunner 0f6b0380a8 ipsec: Remove scepclient from usage output 2022-09-06 09:33:00 +02:00
Tobias Brunner befdefa5d3 starter: Fix comment for debug function 2022-09-06 09:33:00 +02:00
Tobias Brunner 73f6047a77 conf: Remove config snippet for scepclient 2022-09-06 09:33:00 +02:00
Tobias Brunner c9ccec9bc3 configure: Remove AC_SUBST for unused variable 2022-09-06 09:33:00 +02:00
Tobias Brunner 7bc491a7fa android: Remove scepclient from old top-level Android.mk 2022-09-06 09:33:00 +02:00
Tobias Brunner 73901d2cc3 github: Remove --enable-scepclient from macOS build options 2022-09-06 09:33:00 +02:00
Tobias Brunner 879ffd7ece unit-tests: Make TLS echo server cancelable
Seems to be required on macOS (libtls tests didn't run before the recent
implicit enabling via pki).  Other platforms apparently let accept() fail
if the socket is shutdown/closed in teardown_creds(), macOS apparently
doesn't do that.
2022-09-06 09:33:00 +02:00
Tobias Brunner 88859b506c libtls: Fix encoding of TLS 1.3 certificate extension as server
Same as 9664ef4ba6 ("libtls: Fixed encoding of TLS 1.3 certificate
extension") but for the server.
2022-09-06 09:33:00 +02:00
Tobias Brunner 023070b6d0 Use wolfSSL 5.5.0 for tests 2022-09-06 09:33:00 +02:00
Tobias Brunner 71b0c031c2 android: Slightly increase NDK version
This version was installed in the base image until Aug 1st (the other we
installed was not actually used for a while).
2022-08-18 09:42:34 +02:00
Tobias Brunner 47fd5ab6b5 eap-mschapv2: Fix compile warning/error when compiled with -Warray-bounds
Since the allocated data was smaller than sizeof(eap_mschapv2_header_t),
the following compile error was triggered (with newer GCC versions):

eap_mschapv2.c: In function 'process_peer_success':
eap_mschapv2.c:945:12: error: array subscript 'eap_mschapv2_header_t[0]' is partly outside array bounds of 'unsigned char[6]' [-Werror=array-bounds]
  945 |         eap->code = EAP_RESPONSE;
      |            ^~
In file included from /usr/include/stdlib.h:587,
                 from ../../../../src/libstrongswan/utils/printf_hook/printf_hook.h:26,
                 from ../../../../src/libstrongswan/library.h:101,
                 from ../../../../src/libcharon/sa/eap/eap_method.h:28,
                 from eap_mschapv2.h:27,
                 from eap_mschapv2.c:18:
eap_mschapv2.c:944:15: note: object of size 6 allocated by '__builtin_alloca'
  944 |         eap = alloca(len);
      |               ^~~~~~

Closes strongswan/strongswan#1188
Closes strongswan/strongswan#1215
2022-08-18 09:39:05 +02:00
Tobias Brunner 80dec436ce NEWS: Add news for 5.9.7 2022-07-26 15:58:33 +02:00
Tobias Brunner 19baf5a08c ike-cfg: Fix typo in method description 2022-07-26 14:35:56 +02:00
Tobias Brunner 45e6311640 mock-dh: Fix typo in comment 2022-07-26 10:03:23 +02:00
Tobias Brunner 77553bfee6 dhcp: Fix retransmission timeouts
The previous code did not ensure that there was a delay of at least
`try` seconds after each sent request.  Instead, whenever the condvar was
signaled, which could be due to retransmitted responses or messages for
unrelated transactions (there could even be spurious wakeups), the counter
was increased and a retransmit sent.  So instead of actually waiting for
15 seconds for a response (and sending 4 retransmits over that timespan),
it could happen that all five messages were sent within a second without
enough time to actually receive a response.

Using an absolute timeout that we reuse as long as there was no timeout
and the condvar was signaled for something unrelated, should ensure we
wait at least the intended delay after each sent message.

Closes strongswan/strongswan#1154
2022-07-22 07:20:30 +02:00
Tobias Brunner 44ab5533b0 connmark: Consider configured mask in installed firewall rules
This allows using the upper parts of the marks for other purposes.  For
instance, with `mark_in=mark_out=%unique/0x0000ffff` mark values in the
upper two bytes would not get reset by the rules installed by this plugin.
However, note that in this example the daemon would have to get restarted
after 65'535 CHILD_SAs to reset the counter for unique marks, which is a
global 32-bit counter that's unaware of any masks.

Closes strongswan/strongswan#1087
2022-07-18 15:05:51 +02:00
Tobias Brunner 42ed6b44b2 af-alg: Fix "'strncpy' specified bound equals destination size" warnings 2022-07-18 14:49:12 +02:00
Tobias Brunner 112bb465fb openssl: Add support for AES and Camellia in CTR mode 2022-07-18 13:01:22 +02:00
Tobias Brunner 3d966d6d0a aggressive-mode: Determine local identity before deriving keys
This might require a PSK, for which the local identity might be necessary.
2022-07-18 12:56:20 +02:00
Tobias Brunner 833333eae9 child-cfg: Skip non-matching TS instead of replacing them for transport mode
get_traffic_selectors() is called the same way also as responder when
selecting child configs via peer_cfg_t::select_child_cfg().  Replacing
TS for all child configs could lead to selecting one that later fails
to actually narrow the traffic selectors.  Ignoring non-matching TS also
helps if we have a trap config with multiple remote subnets (otherwise,
we'd have to filter duplicates afterwards).

When installing traps, the hosts might be %any, in which case we allow
the configured (technically non-matching) TS for the wildcard use case.

Fixes: da82786b2d ("child-cfg: Always apply hosts to traffic selectors if proposing transport mode")
Closes strongswan/strongswan#1143
2022-07-18 12:44:20 +02:00
Tobias Brunner 1f242e772b configure: Add option to build with extended compiler warnings and -Werror
Setting -Werror in CFLAGS passed to configure is not ideal as that affects
all the checks performed by the script.

This caused an issue with newer versions of Autoconf and the AC_PROG_LEX
macro that insisted on finding a lexer library.  But due to warnings from
the generated test lexer (misleading indentation) that got turned into
errors no library was found (none would have been necessary), so LEX was
not set and no lexers were built.

With this option enabled, we add -Werror to CFLAGS after all tests ran.
It also enables additional warnings via -Wextra.

The option is auto-enabled when building from the repository.
2022-07-18 12:42:24 +02:00
Tobias Brunner 9c86787de5 libfast: Fix incompatible function types warning 2022-07-18 12:42:24 +02:00
Tobias Brunner 36d16e5b24 forecast: Fix incompatible function types warning 2022-07-18 12:42:24 +02:00
Tobias Brunner b37a3e249a test-runner: Fix compiler warning
Making the variable volatile avoids a "variable ‘failure’ might be
clobbered by ‘longjmp’" warning (or error when compiling with
-Werror) that's triggered via -Wextra.
2022-07-18 12:42:24 +02:00
Tobias Brunner 1656e3806b configure: Add noyywrap option to AC_PROG_LEX for Autoconf 2.70+
FreeBSD packages 2.71 and that spits out a deprecation warning if we
don't set this.
2022-07-18 12:42:24 +02:00
Tobias Brunner eae30af029 Use wolfSSL 5.4.0 for tests
The 5.4.0 update changed the default bignum implementation to what
could explicitly be enabled via `--enable-sp-math-all`.  Since this uses
fixed-sized buffers sufficient for key sizes of SP_INT_BITS, with a default
of 4096, modp6144 and modp8192 didn't work anymore (wc_DhGenerateKeyPair()
returned MP_EXPTMOD_E).  So we have to adapt the feature checks for this.

To support the larger DH groups we can either increase the buffer size
via `--with-max-rsa-bits` or add `--enable-heapmath` so buffers get
(re-)allocated as needed.  We go with the latter for now.
2022-07-18 12:42:24 +02:00
Tobias Brunner 30faf04e92 Merge branch 'multi-ke-backport'
This merge includes changes that were created for the upcoming IKEv2
extension for multiple key exchanges over the last four years, but which
are not directly related to the actual protocol changes.

Changes include renaming diffie_hellman_t to the more generic
key_exchange_t (also renamed are some of the interface's methods),
making utility functions that deal with DH groups more generic, and let
tasks handle the first IKE_AUTH message more reliably by not depending
on e.g. specific message IDs.

One significant change is delaying the IKEv2 key derivation until
the keys are actually needed to process or send the next message.  So
instead of deriving the keys directly while processing an IKE_SA_INIT
request (which could come from a spoofed address), this is delayed until
the corresponding IKE_AUTH request is received.  Implementations of the
key_exchange_t interface are now expected to do the key derivation and
any costly public key validation in get_shared_secret() and not
set_public_key().

Sent IKE_SA_INIT messages are now also not pre-generated anymore to collect
their encoding for the authentication.  Instead, a new post_build() hook
allows the ike-auth task to do so after the actual message has been built,
which allows later tasks and plugins (via message() hook) to modify the
message (e.g. add notifies) after the ike-auth task's build() method
already ran.

Also changed is how inbound requests are processed and retransmits are
detected.  Instead of parsing all inbound messages right away (which
might trigger a key derivation or require keys we don't have anymore in
the multi-KE use case), we now first check a request's message ID and
compare its hash to that of the previous request to decide if it's a
valid retransmit.  For fragmented messages, we only keep track of the
first fragment so we can send the corresponding response immediately if
a retransmit of it is received, instead of waiting for all fragments
and reconstructing the message, which we did before.
2022-06-29 11:18:28 +02:00
Tobias Brunner 23b0220b1c unit-tests: Allow configuring log levels for individual groups 2022-06-29 10:28:50 +02:00
Tobias Brunner 35edbc4048 debug: Support configuring different log levels for groups in default logger 2022-06-29 10:28:50 +02:00
Tobias Brunner 4e5a2037e7 wolfssl: Move shared secret calculation to get_shared_secret()
The ECDH implementation gets a bit simpler since we removed the
ecp_x_coordinate_only option a while ago.

Also added calls to verify public keys.
2022-06-29 10:28:50 +02:00
Tobias Brunner 26ca0c9f70 pkcs11: Move shared secret calculation to get_shared_secret() 2022-06-29 10:28:50 +02:00
Tobias Brunner d95082ce0d gcrypt: Move shared secret calculation to get_shared_secret() 2022-06-29 10:28:50 +02:00
Tobias Brunner ed3494ef7b curve25519: Move shared secret calculation to get_shared_secret() 2022-06-29 10:28:50 +02:00
Tobias Brunner 31f467d70b botan: Move shared secret calculation to get_shared_secret() 2022-06-29 10:28:50 +02:00
Tobias Brunner 0e82d5cc2c gmp: Move shared secret calculation to get_shared_secret()
This avoids doing costly operations when just setting the public key.
For the same reason the optional extended public key check is moved.
2022-06-29 10:28:50 +02:00
Tobias Brunner 0351b5af3b key-exchange: Warn about costly operations in set_public_key() 2022-06-29 10:28:50 +02:00
Tobias Brunner e334bd46b1 ike-auth: Move packet collection to post_build() method
This way we avoid having to pre-generate the message when it could
theoretically still get modified by a task that follows or from a plugin
via message() hook.
2022-06-29 10:28:50 +02:00
Tobias Brunner 44629bbadb ikev2: Delay IKE key derivation until next message
In particular as responder, this delays costly cryptographic operations
until the IKE_AUTH request is received, which is preferable to reduce
the impact of DoS attacks.

Another advantage is that the key material is not changed until all tasks
built or processed a message.
2022-06-29 10:28:50 +02:00
Tobias Brunner 2a9323a18a ikev2: Use hashes to detect retransmits
This way we avoid parsing messages with unexpected message IDs, which
might not even be possible if we don't have the keys anymore.  However,
the next commit should avoid the latter and this way we avoid deriving
keys for retransmits or unexpected messages.

This also changes how retransmits for fragmented messages are triggered.
Previously, we waited for all fragments and reconstructed the message
before retransmitting the response.  Now we only track the first
fragment and if we receive a retransmit of it respond immediately
without waiting for other fragments (which are now ignored).  This is in
compliance with RFC 7383, section 2.6.1, and can avoid issues if there
are lots of fragments.
2022-06-29 10:28:50 +02:00
Tobias Brunner 639af09b2e child-sa: Cache and forward actual initiator flag for outbound SA
Kernel interfaces (e.g. TKM) might rely on this flag to be correct.
2022-06-29 10:28:50 +02:00
Tobias Brunner 8d6ed71a55 ikev2: Send deletes also for rekeyed SAs
This way we can use the IKE_REKEYED state for both redundant and old SAs
to suppress ike_updown().

In the ike-delete task we don't suppress events in state IKE_REKEYING as
that's the case when we delete an SA the peer is currently rekeying with
multiple key exchanges.
2022-06-29 10:28:50 +02:00
Tobias Brunner b6652ababe ikev2: Let ike/child-rekey tasks indicate if the passive task was adopted
This gives us more flexibility with tasks that return NEED_MORE (currently
none of the colliding tasks do, but that will change with multi-KE
rekeyings).  The active task has to check itself if the passive task is
done and should be removed from the task manager.
2022-06-29 10:28:50 +02:00
Tobias Brunner 7ffeed01c0 ike-rekey: Remove collision task type checks
Since f67199378d ("ike-rekey: Handle undetected collisions also if
delete is delayed") we only ever track tasks of type TASK_IKE_REKEY, so
there is no need to check the type or use the generic task_t interface.

Also changed some of the comments to clarify collision handling.
2022-06-29 10:28:50 +02:00
Tobias Brunner 87a86e9c98 ike-rekey: Don't actively rekey already rekeyed SAs
If the peer successfully rekeyed the SA it gets marked as IKE_REKEYED
and it remains until the peer deletes it (or a timeout).  There is no
point in rekeying such SAs again.

IKE_REKEYING will be relevant if we have multi-KE rekeyings and are
waiting for followup key exchanges for a passive rekeying.
2022-06-29 10:28:50 +02:00
Tobias Brunner 39c66693a0 ike-init: Ignore COOKIE payloads during rekeying
This ensures that process_i() only returns NEED_MORE due to multiple
key exchanges or an INVALID_KE_PAYLOAD notify.
2022-06-29 10:28:50 +02:00
Tobias Brunner e5bf9b23b2 ike-sa-manager: Log SPIs when checking in an IKE_SA 2022-06-29 10:28:50 +02:00
Tobias Brunner c1987aefbe message: Fix payload type in last unprotected payload of a fragmented message 2022-06-29 10:28:50 +02:00
Tobias Brunner ba348b4799 ike-rekey: Reset IKE_SA after processing CREATE_CHILD_SA request
This probably didn't cause any problems, as there wasn't really anything
happening between the calls, but reset it anyway, just to be safe.
2022-06-29 10:28:50 +02:00
Tobias Brunner 36312808d1 ikev2: Allow tasks to do work after processing requests/responses 2022-06-29 10:28:50 +02:00
Tobias Brunner 210e2177aa task: Add optional post_process() method
This will allows tasks to do some work after a message has been
processed.
2022-06-29 10:28:50 +02:00
Tobias Brunner 1719e0f0aa ikev2: Allow tasks to do work after generating requests/responses 2022-06-29 10:28:50 +02:00
Tobias Brunner 87caf36bb9 task: Add optional post_build() method
This will allow tasks to do some work after the message has been
generated.
2022-06-29 10:28:50 +02:00
Tobias Brunner 28b33d7cac ike-auth: Support exchange between IKE_SA_INIT and IKE_AUTH 2022-06-29 10:28:50 +02:00
Tobias Brunner 09a4aed3a2 child-create: Support exchange between IKE_SA_INIT and IKE_AUTH 2022-06-29 10:28:50 +02:00
Tobias Brunner 3a8ea08686 ike-mobike: Support exchange between IKE_SA_INIT and IKE_AUTH
This changes the MID of the first IKE_AUTH message.
2022-06-29 10:28:50 +02:00
Tobias Brunner 366fce8f03 ike-config: Support exchange between IKE_SA_INIT and IKE_AUTH
This changes the MID of the first IKE_AUTH message.
2022-06-29 10:28:50 +02:00
Tobias Brunner 09d4497536 ike-cert-post: Make absolutely sure certificates are only added to IKE_AUTH
The AUTH payload check in build_certs() should be fine, but add some
extra checks just to make really sure and also for clarification.
2022-06-29 10:28:50 +02:00
Tobias Brunner f2e79bf334 ike-cert-pre: Support exchange between IKE_SA_INIT and IKE_AUTH
The first IKE_AUTH does not have MID 1 if that's the case.
2022-06-29 10:28:50 +02:00